簡體   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