asp.net和php中用window.open開啟的視窗session丟失的解決辦法

來源:互聯網
上載者:User

 

希望對那些正好遇到此問題的人有點協助。下面是asp.net的原始碼,可以下載.

window.open開啟視窗Session丟失

 

window.open雖然很不討人喜歡,但它有時候又有一定的用處,現在很多辦公自動化系統(OA),

為了給使用者更大的操作空間,都在使用者登陸以後用window.open開啟一個只有標題列的視窗。

但是在open出來的視窗中,卻找不到在登陸視窗產生的session了。

 

一:在asp.net中的解決辦法:

1:假若登入視窗為default.aspx,我們在後台可以這樣寫:

1 string user = Request.Form["user"];
2 Session["_uid"] = user;
3 string sid = Session.SessionID;
4 Page.RegisterStartupScript
5 ("open","<script>
6 window.open
7 ('index.aspx?sid="+sid+"','_blank','status=yes,scrollbars=yes,resizable=yes');
8 </script>");

 這樣我們就可以把SessionID傳遞到新開啟的視窗index.aspx中,我們在index.aspx中就可以根據這個SessionID

重新構造一個Session。

 2:在index.aspx中我們可以這樣來重新構造session:

 1 using System.Web.SessionState;
 2 
 3 public partial class index : System.Web.UI.Page
 4 {
 5     protected void Page_Load(object sender, EventArgs e)
 6     {
 7         string sid = Request.QueryString["sid"].ToString();
 8         SessionIDTest ss = new SessionIDTest(sid);
 9         ss.CreateSessionID(Context);
10     }
11 }
12 
13 public class SessionIDTest : SessionIDManager
14 {
15     private string sid;
16     public SessionIDTest(string sid)
17     {
18         this.sid = sid;
19     }
20     public override string CreateSessionID(HttpContext context)
21     {
22         return sid;
23     }
24 
25 }

 其中我們用到了SessionState命名空間下的SessionIDManager類,我們通過重寫它的CreateSessionID

這個虛方法來重新或得Session。CreateSessionID這個虛方法需要我們重寫,它返回的就是一個新的Session

的SessionID,而這個SessionID就是從登陸介面default.aspx中傳遞過來的,所以我們可以認為新構造的

Session和登陸視窗的Session是一個Session。

 

 二:在php中的解決辦法:

1:在php中解決這個sesssion丟失,用的也是同樣的辦法,並且還更簡單,只需兩個函數就搞定了,

session_start();
$sid=session_id();

session_id這個函數就是取得登陸介面的SessionID。

 

 2:然後我們就可以想在.net中一樣,根據這個SessionID構造一個Session:

$sid=$_GET['sid'];

session_id($sid); 

session_start();

 Session_id這個函數就是重新構造Session。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.