首先,请不要忽视这个问题 - 我知道这是一个丑陋的情况,但嘿,现实生活并不漂亮。
我正在为一个用asp.net编写的web应用程序开发一个额外的部分,但是在php中 - 它主要完成了(这两部分在数据库之外并没有真正相互通信 - 集成主要是化妆品。)
我唯一的问题是在.net会话过期时从php部分进行检测,以便将用户注销并重定向到登录页面。
我相信asp.net应用程序是编译的,但无论哪种方式我都不允许改变它所以我想也许最好的办法就是创建一个非常小/简单的aspx页面输出true或false我可以使用php中的curl调用(并传递浏览器的cookie。)
这甚至可能吗?我不确定会话安全性如何在asp.net上运行,例如,一个.net应用程序是否可以读取另一个会话变量,但如果它类似于php,那么它就有可能。
mypage.php --curl--> checksession.aspx --|
| |
<----------- true / false <---------------
因此mypage发出GET(使用来自浏览器的cookie)使用curl进行checksession,checksession只返回true或false(或类似的东西),如果那是错误的话,mypage会重定向到网站的登录页面。
php端的身份验证已经整理好,并且与此问题分开。
所以真的,我需要知道的是,我可以只使用一个简单的.aspx文件进行检查,如果是这样,我会去哪里找出如何编写这么简单的页面?如果它只是一行或三行,请你告诉我这些行是什么(对不起,我从未做过任何.net的东西..)
如果这是不可能的,那么如果你不介意,你能提供一些替代解决方案吗?谢谢!
- 编辑 -
在这个问题的大部分时间里,我现在认为使用PHP来解决这个问题是一个坏主意。实际上涉及两个级别的身份验证(一个是正常的HTTP请求/响应登录类型的事情,然后是.net会话) - 最重要的是,我完全错过了这一点,显然这些会话几乎肯定会由用户浏览器的IP,我必须欺骗或者来自curl的东西,因为它将在服务器上运行。
所以我想我会在页面的标题中的某个地方使用jQuery来检查并根据需要重定向......不知何故:/
- 编辑2 - 好吧,所以javascript方式非常适合我的需求 - 显然它不是一种安全的做事方式,但幸运的是在这种情况下它没关系,因为这只是内部网上使用的应用程序(而且他们认证用户的伪劣方式很糟糕反正。)
答案 0 :(得分:3)
这里有多种方式。首先,单独的cookie不会做太多,因为即使Cookie还活着,会话也可以在ASP.net中过期。
ASP.net支持多个SessionStates,其中两个是常见的:
方案2是您最好的选择,因为您只需从cookie中读取会话ID并在SQL Server数据库中查询会话信息。
<1>在方案1中,您的方法是正确的:您需要ASP.net应用程序的帮助,该应用程序可以是.aspx页面。通过PHP传递会话cookie并请检查Session.SessionID和Session.IsNewSession以确保ID匹配和IsNewSession应为false - 否则,ASP.net只是重新创建了一个新会话。您可能必须与ASP.net页面中的会话进行交互以激活它(Session["PingFromPHP"] = true
)可能干扰ASP.net应用程序如果您的密钥([ - -brackets中的名称)具有相同的名称。
如果编译ASP.net应用程序,将用作代码的.aspx.cs文件放入名为App_Code的文件夹中,这应该允许您运行它。
希望能让你开始。
答案 1 :(得分:1)
我不知道php但是如果两个应用程序都在同一个域上,你应该能够读取ASP.Net会话cookie并确定它是否已经过期。,因为cookie是域名而不是web应用程序它等浏览器肯定会给cookie提供请求。
答案 2 :(得分:1)
这可能不是这个问题的正确答案..但我发现了一个相当简单(稍微丑陋)的修复,这真的有点运气..
我创建了一个名为checksession.aspx的页面,如果会话已过期,asp.net(或iis应用程序)会自动将该页面重定向到登录页面。使用curl我现在可以检查我是否获得302重定向,如果是,我知道会话已经过期。
Woot:)