从php检测过期的asp.net会话

从php检测过期的asp.net会话,php,asp.net,session,cookies,curl,Php,Asp.net,Session,Cookies,Curl,首先,请不要忽视这个问题-我知道这是一个丑陋的情况,但嘿,现实生活并不美好 我正在为一个用asp.net编写的web应用程序开发一个额外的部分,但是在php中-大部分都是这样做的(这两个部分在数据库之外并不真正相互通信-集成大部分只是装饰性的) 我唯一的问题是从php部分检测.net会话何时过期,以便它注销用户并重定向到登录页面 我相信asp.net应用程序是经过编译的,但无论如何我都不允许修改它,所以我想最好的办法是制作一个非常小/简单的aspx页面,输出true或false,我可以使用php

首先,请不要忽视这个问题-我知道这是一个丑陋的情况,但嘿,现实生活并不美好

我正在为一个用asp.net编写的web应用程序开发一个额外的部分,但是在php中-大部分都是这样做的(这两个部分在数据库之外并不真正相互通信-集成大部分只是装饰性的)

我唯一的问题是从php部分检测.net会话何时过期,以便它注销用户并重定向到登录页面

我相信asp.net应用程序是经过编译的,但无论如何我都不允许修改它,所以我想最好的办法是制作一个非常小/简单的aspx页面,输出true或false,我可以使用php中的curl调用它(并传递浏览器的cookies)

这可能吗?我不确定asp.net上的会话安全性是如何工作的,例如一个.net应用程序是否可以读取另一个的会话变量,但如果它与php类似,那么它是可能的

mypage.php --curl--> checksession.aspx --|
|                                        |
<----------- true / false <---------------
mypage.php--curl-->checksession.aspx--|
|                                        |

我不知道php,但如果两个应用程序都在同一个域上,您应该能够读取ASP.Net会话cookie并确定它是否已过期。,因为cookie是指向域的,而不是使用它的web应用程序,所以浏览器肯定会向cookie发出请求。

我不知道php,但如果两个应用程序位于同一个域上,您应该能够读取ASP.Net会话cookie并确定它是否已过期。

。,因为cookie对域是有益的,而不是使用它的web应用程序,所以浏览器肯定会将请求与cookie一起提供。

这可能不是这个问题的正确答案。。但我发现了一个相当简单(有点难看)的修复方法,这真的有点运气

我创建了一个名为checksession.aspx的页面,如果会话已过期,asp.net(或iis应用程序)会自动将该页面重定向到登录页面。通过使用curl,我现在可以检查是否得到302重定向,如果是,我知道会话已过期


胡特:)

这可能不是这个问题的正确答案。。但我发现了一个相当简单(有点难看)的修复方法,这真的有点运气

我创建了一个名为checksession.aspx的页面,如果会话已过期,asp.net(或iis应用程序)会自动将该页面重定向到登录页面。通过使用curl,我现在可以检查是否得到302重定向,如果是,我知道会话已过期


Woot:)

这里有多种方法。首先,Cookie本身并没有多大作用,因为即使Cookie仍然存在,会话也可能在ASP.net中过期

ASP.net支持多个,其中两个是常见的:

  • 在进程中-这里,Web服务器(通常是IIS)在内存中保存所有会话。如果重新启动IIS服务(默认情况下每24小时发生一次,而不仅仅是在系统重新启动时!),所有会话都将被擦除(这就是为什么cookie本身没有帮助)。我认为这种情况是默认情况,因此在单服务器环境中非常常见
  • SQL Server—在这里,会话数据存储在SQL Server数据库中。不过,这并不经常使用
  • 状态服务器。这似乎很少见,所以我省略了
  • 场景2是最好的选择,因为您可以从cookie中读取会话id,然后查询SQL Server数据库中的会话信息

    在场景1中,您的方法是正确的:您需要ASP.net应用程序的帮助,该应用程序可以是.aspx页面。从PHP发出请求,传入会话cookie并进行检查,以确保ID匹配且IsNewSession应为false-否则,ASP.net刚刚重新创建了一个新会话

    您可能需要从ASP.net页面与会话交互以激活它(
    Session[“PingFromPHP”]=true
    ),如果您的键(括号中的名称)具有相同的名称,则可能会干扰ASP.net应用程序

    如果编译了ASP.net应用程序,请将用作代码隐藏的.aspx.cs文件放入名为的文件夹中,这样您就可以运行它


    希望这能让你开始。

    这里有多种方法。首先,Cookie本身并没有多大作用,因为即使Cookie仍然存在,会话也可能在ASP.net中过期

    ASP.net支持多个,其中两个是常见的:

  • 在进程中-这里,Web服务器(通常是IIS)在内存中保存所有会话。如果重新启动IIS服务(默认情况下每24小时发生一次,而不仅仅是在系统重新启动时!),所有会话都将被擦除(这就是为什么cookie本身没有帮助)。我认为这种情况是默认情况,因此在单服务器环境中非常常见
  • SQL Server—在这里,会话数据存储在SQL Server数据库中。不过,这并不经常使用
  • 状态服务器。这似乎很少见,所以我省略了
  • 场景2是最好的选择,因为您可以从cookie中读取会话id,然后查询SQL Server数据库中的会话信息

    在场景1中,您的方法是正确的:您需要ASP.net应用程序的帮助,该应用程序可以是.aspx页面。从PHP发出请求,传入会话cookie并进行检查,以确保ID匹配且IsNewSession应为false-否则,ASP.net刚刚重新创建了一个新会话

    您可能需要从ASP.net页面与会话交互以激活它(
    Session[“PingFromPHP”]=true
    ),如果您的键(括号中的名称)具有相同的名称,则可能会干扰ASP.net应用程序

    如果编译了ASP.net应用程序,请将用作代码隐藏的.aspx.cs文件放入名为的文件夹中,这样您就可以运行它


    希望这能让你开始。

    另一个更难看的替代方法是使用curl来查看返回的页面是否是登录页面本身,然后从那里开始。。但是