2010-04-11 53 views
0

在这个问题中,我问如何发布到一个PHP文件形式的VB.NET应用程序:POST to webpage in vb.net (win forms, desktop, not ASP.net) 所以现在我已经登录用户用户通过发布他们的用户名和密码到PHP文件,然后php文件会执行安全性/检查它们是否存在/ etc,如果用户名和密码都正确,则将用户标识存储在会话变量中。使用桌面应用程序的PHP会话

现在,如果vb.net应用程序尝试下载数据从其中需要用户登录页面时,它做检查此:

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

然而,在应用程序会话变量已经正确登录后没有设置。 会话如何与这样的vb.net应用程序一起工作?

当用户成功登录时,我应该下载用户ID并将其保存在vb.net应用程序中,然后将其发布到需要验证的每个页面上?

+1

贵vb.net应用程序处理Cookie? – 2010-04-11 11:20:26

+0

不,应该吗? – 2010-04-11 11:28:06

+0

它应该处理Cookie或PHP会话ID,请参阅我的答案。 – 2010-04-11 11:44:08

回答

0

要让您的PHP网站将VB.NET客户端识别为登录用户,您需要发送一个cookie。当你在PHP中使用session_start()时,PHP会在访问者cookie中设置一个随机ID来链接会话。你需要知道的是这个ID是什么。更具体地说,在您第一次访问该网站时,您应该阅读此内容。

在你的其他问题中,我看到你正在使用WebClient实例。如果您发送了请求,那么还有一个名为ResponseHeaders的属性。这是一个集合,其中包含来自Web服务器的响应头(在这种情况下,运行您的网站的Web服务器)。这可能也包含一个cookie代码。

例如:

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) 

你必须处理responseArray在这个例子中,但这是用于存储的cookie,并把它发回的基本原则。您使用此WebClient的同一个实例发送的下一个请求将包含您的网站用最后一个请求回复的Cookie。基本上这意味着,PHP网站创建的SessionID将会成员并发送回去。

就我个人而言,我会为此编写一个小包装类。只需制作一个功能,发送登录请求到您的特定网站。然后存储该cookie,并且稍后您将发送的每个请求都将添加此cookie。你可以很容易地写一个'通用'的方法,如 字符串GetPage(字符串URL); 字符串PostPage(字符串URL,字符串PostData) 等

0

你应该基本上实现浏览器的会话管理功能。也就是说,您应该在您的URL中提供session-id(如果web服务器支持并允许)或者您应该将session-id存储在cookie中,并且在执行HTTP请求时,您应该传递Cookie。这是首选的方法。

注意的System.Web包含做HTTP请求和接收HTTP响应,所以你不要有自己写的一切,只是使用的类的命名空间,你可以实现它很容易类。

0

会议在PHP(和所有其他网络平台,我知道)以这种方式工作:

  • 客户端发出第一个请求/发送的登录数据
  • PHP创建客户端会话,产生
  • 随机会话ID为“登录”
  • PHP发送生成的会话ID到客户端(通常通过一个Cookie)
  • PHP脚本标志着会话
  • 客户端发出后续请求和总是沿着SES发送锡永ID
  • PHP识别由会话ID,并加载会话数据的客户端

如果您的客户端发出请求,而不发送会话ID某种程度上,这将永远是“没有登录” - 会话ID是什么让PHP脚本“记住”它的状态。

如果您的WebApp函数库不处理会话cookie(我不熟悉vb.net编程和函数库),寻找一个能够或可能更简单的函数库,让PHP脚本输出会话ID成功登录后。赶上打印在您的应用程序,并添加以下GET参数:

?PHPSESSID=123456 

(123456是您的会话ID)给你从你的应用PHP尽一切后续请求。这样,PHP应该能够识别正确的会话。正如我所说,我不熟悉VB.NET,所以可能会有更优雅的,现成的解决方案。但是如果没有的话,这肯定会起作用。

0

让您的桌面应用程序读取PHP脚本在实际页面内容之前发送的标题。

其中一个标题将是cookie数据,您需要存储此数据,因为每次从PHP脚本请求页面时都需要发送该数据。

因此,您需要了解如何从响应中读取标头并为请求写入标头。

如果这是为你努力,那么你可以通过URL GET参数传递数据,如:http://example.com/?loginid=12345