[英]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 ,其中兩個是常見的:
方案2是最好的選擇,因為您可以從cookie中讀取會話ID,並在SQL Server數據庫中查詢會話信息。
在方案1中,您的方法是正確的:您需要ASP.net應用程序的幫助,該應用程序可以是.aspx頁。 向PHP發出請求,傳入會話cookie並檢查Session.SessionID和Session.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.