PHP Session masaüstü uygulaması kullanarak

4 Cevap php

In this question I asked how to POST to a php file form a vb.net app: http://stackoverflow.com/questions/2615335/post-to-webpage-in-vb-net-win-forms-desktop-not-asp-net So now I've logged in the user user by posting their username and password to the php file, the php file then does security/checks they exist/etc and if both username and password are correct is stores the user ID in a session variable.

Vb.net app yapman için kullanıcı gereken bir sayfadan veri indirmek için çalışırsa Şimdi, yaparak bu denetler:

if (!isset($_SESSION['uid'])) {
    header("Location: index.php");
}

However after having logged correctly in the app the session variable is not set. How does session work with a vb.net app like this?

Başarıyla kullanıcı günlükleri ben kullanıcı kimliği indirmek ve vb.net app tutmak ve daha sonra kimlik doğrulaması gerektiren her sayfaya göndermek gerekir?

4 Cevap

PHP web sitesi bir çerez göndermek için gereken kullanıcı bir giriş olarak VB.NET müşteri tanımak zorunda. Eğer PHP session_start () kullandığınızda, PHP ziyaretçilerin rasgele bir kimlik koyacaktır ile oturum bağlamak için çerez. Ne bilmeniz gereken bu kimliği budur. Daha spesifik olarak, bir web sitesi için ilk talebi üzerine, bu okumak gerekir.

Diğer sorunuza ben bir WebClient örneği kullanıyor gördüm. Eğer bir istek gönderdi, ResponseHeaders denilen bir özellik de var. Bu (bu durumda sitenizi çalışıyor webserver olarak) web sunucusu yanıt başlıklarını içeren bir koleksiyon. Bu, büyük olasılıkla da bir cookie kodunu içerecektir.

Örneğin:

Dim myWebClient As New WebClient

Dim responseArray = myWebClient.UploadData("http://...", "POST", Encoding.ASCII.GetBytes(postData))
Dim MyCookie As String = cl.ResponseHeaders.Item(HttpResponseHeader.SetCookie)

myWebClient.Headers.Add(HttpRequestHeader.Cookie, MyCookie)

Bu örnekte responseArray işlemek zorunda, ama bu bir çerez depolama ve geri göndermek için temel ilkedir. Bu WebClient'ın aynı örneği ile göndermek sonraki istek sitenizin son isteği ile cevap çerezi içerir. Temelde PHP site oluşturur Sessionıd üyeli ve geri göndermek olacak demektir.

Personally I would write a little wrapper class around this. Just make a function that sends out a login request to your specific site. Then store the cookie, and every request you will send later you add this cookie to it. You could easily write a 'generic' method like string GetPage(string URL); string PostPage(string URL, string PostData) etc.

Temelde oturum yönetimi ile ilgili bir tarayıcı bu işlevselliğini uygulamak gerekir. Yani (web sunucusu destekler ve bu izin veriyorsa) sizin URL oturum kimliği sağlamalıdır veya çerez oturum kimliği saklamak gerekir, ve HTTP isteği yaparken, size boyunca çerez geçmelidir ya, olduğunu. Bu, tercih edilen bir yöntemdir.

Eğer, kendiniz her şeyi yazmak sadece ad sınıfları kullanmak ve bunu oldukça kolay uygulayabilirsiniz zorunda kalmamak, System.Web Http isteklerini yapıyor ve Http yanıtları almak için sınıfları içerdiğini unutmayın.

PHP oturumları (ve bildiğim diğer web platformu) bu şekilde çalışır:

  • İstemci ilk istek / login veri gönderir yapar
  • PHP istemci için bir oturum oluşturur, rastgele bir oturum kimliği oluşturulur
  • "Oturum" olarak PHP komut o oturuma işaretleri
  • PHP (genellikle bir tanımlama ile) müşteriye oluşturulan oturum kimliği gönderir
  • Müşteri bir sonraki istekleri yapar ve her oturum kimliği boyunca gönderir
  • PHP oturum kimliği ile müşteri tanır ve oturum verilerini yükler

Istemci oturumu numarası bir yol göndermeden bir istek yaparsa, o zaman "giriş yapmadın" olacak - oturum kimliği PHP komut dosyası durumunu "hatırlamak" yapan şeydir.

Belki daha kolay - - senin WebApp kitaplığı (Ben vb.net programlama ve kütüphaneler aşina değilim) oturum çerezleri ele değilse, olabilir, ya da bir kütüphaneye bakmak PHP komut dosyası baskı dışarı var başarılı giriş oturum kimliği. App bu çıktıyı yakalamak ve aşağıdaki GET parametresini ekleyin:

?PHPSESSID=123456

PHP için app yapmak sonraki her istek için (123456 oturum ID olmak). Bu şekilde, PHP doğru oturumu tanımak gerekir.

Dediğim gibi bunun için daha zarif, hazır çözümler olabilir bu yüzden, ben VB.NET aşina değilim. Ama bu kesinlikle hiçbiri yoksa işe gidiyor.

Gerçek sayfa içeriğiyle önce php komut dosyası tarafından gönderilen başlıklarını okumak için masaüstü uygulaması alın.

Bu başlıklardan biri çerez veri olacak, sen bu php komut dosyası bir sayfa için istekte her zaman göndermek gerekir, çünkü bu saklamak gerekir.

Yani, bir yanıttan başlıklarını okumak ve bir istek başlıklarını yazmak için öğrenmek gerekir.

http://example.com/?loginid=12345: o zaman gibi, url GET parametreler üzerinden veri geçirebiliriz için bu zor ise