繁体   English   中英

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

[英]Detecting an expired asp.net session from php

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

我正在为用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使用curl发出一个GET(带有来自浏览器的cookie)到checksession,checksession只返回true或false(或类似的东西),如果为false,mypage将重定向到站点的登录页面。

php端的身份验证已经解决,并且与此问题分开。

因此,实际上,我需要知道的是我是否可以执行此检查的简单.aspx文件;如果是,我将去哪里找到如何编写此类简单页面的程序? 如果只是三三行,请您让我知道这些行是什么(对不起,我从未做过任何.net的工作。)

如果这不可能,那么如果您不介意,是否可以提供一些替代解决方案? 谢谢!

-编辑-

在花了一天的大部分时间解决这个问题之后,我现在认为完全使用php解决这个问题是一个坏主意。 实际上涉及身份验证的两个级别(一个是正常的HTTP请求/响应登录类型,然后是.net会话)-最重要的是,我完全错过了一点,显然这些会话几乎肯定会得到备份。我必须欺骗的用户浏览器的IP或来自curl的东西,因为它们将在服务器上运行。

所以我想我将在页面标题中的某处使用jQuery来按需检查和重定向...以某种方式:/

-编辑2-好的,所以javascript方式非常适合我的需求-显然,这不是一种安全的方式,但是幸运的是,在这种情况下,因为这只是Intranet上使用的应用程序,所以还可以无论如何,他们对用户进行身份验证的方式非常糟糕。)

这里有多种方式。 首先,仅cookie不会做很多事情,因为即使cookie仍然存在,会话也可以在ASP.net中过期。

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

  1. 处理中-在这里,Web服务器(通常为IIS)将所有会话保存在内存中。 如果重新启动IIS服务(默认情况下每24小时发生一次,而不仅仅是系统重新启动时才发生!),则将擦除所有会话(这就是单独使用cookie不能解决问题的原因)。 我认为这种情况是默认的,因此在单服务器环境中非常常见
  2. SQL Server-此处,会话数据存储在SQL Server数据库中。 不过这种情况并不常用。
  3. 状态服务器。 这似乎并不常见,因此我省略了。

方案2是最好的选择,因为您可以从cookie中读取会话ID,并在SQL Server数据库中查询会话信息。

在方案1中,您的方法是正确的:您需要ASP.net应用程序的帮助,该应用程序可以是.aspx页。 向PHP发出请求,传入会话cookie并检查Session.SessionIDSession.IsNewSession以确保ID Matches和IsNewSession应该为false-否则,ASP.net只是重新创建了一个新Session。

可能需要从ASP.net网页会话交互来激活它( Session["PingFromPHP"] = true ),这可能与ASP.net应用干扰,如果你的键([] -brackets名)有同名。

如果已编译ASP.net应用程序,请将用作代码的.aspx.cs文件放在名为App_Code的文件夹中,这将允许您运行它。

希望能帮助您入门。

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

这可能不是这个问题的正确答案..但是我发现一个相当简单(略难看)的修复程序,确实有点运气。

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

呜呜:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM