由於登入系統是透過SSO進行驗證 驗證完後儲存使用者資訊
卻發現每次請求Action SessionID都在變動 無法取得之前所儲存的使用者資訊
一開始我會先跟controller要求頁面
而這個頁面會在init的時候再跟controller要求其他的資料 觀察發現sessionID一直在變動 Log如下
2017-07-25 17:16:12,509 - (:0) Controller/Action:aaa/aaa01
2017-07-25 17:16:12,511 - (:0) SessionID:shk52leyirufrd3yigy34u5m
2017-07-25 17:16:12,639 - (:0) Session Count:8
2017-07-25 17:16:25,047 - (:0) Controller/Action:aaa/aaa02
2017-07-25 17:16:25,047 - (:0) SessionID:rrixrcxn1x2ewm0hgvalns2x
2017-07-25 17:16:25,048 - (:0) Session Count:0
2017-07-25 17:16:25,050 - (:0) Controller/Action:aaa/aaa03
2017-07-25 17:16:25,050 - (:0) SessionID:51m234bch3refulqjrh1n1is
2017-07-25 17:16:25,051 - (:0) Session Count:0
2017-07-25 17:16:25,271 - (:0) Controller/Action:aaa/aaa04
2017-07-25 17:16:25,271 - (:0) SessionID:v330uzr0xdvxwgx3kpxxr1sc
2017-07-25 17:16:25,272 - (:0) Session Count:0
2017-07-25 17:16:25,350 - (:0) Controller/Action:aaa/aaa05
2017-07-25 17:16:25,350 - (:0) SessionID:2gzllr2yv2z4la2gkqzsrcpn
2017-07-25 17:16:25,350 - (:0) Session Count:0
觀察發現我第一次進入所儲存在Session的資訊通通都不見了
百思不得其解 我在本機測試上sessionID都不會變 再測試機上面測試卻一直在變動 也不知道是不是IIS的問題
後來找到一篇解法[1]
只要在Global 先init好Session就好摟
protected void Session_Start(Object sender, EventArgs e)
{
Session["init"] = 0;
}
原因是說
ASP.Net並不會預先分配空間給Session做使用 只有你要的時候才會去產生 所以每次請求Action都會產生一個新的
但如果我們先給好一個Session 他每次有Action產生的時候都會使用同一個Session
後來發現在第一次進網頁的時候 session還是會亂跳 後來發現是使用Iframe的問題
在web.config加上這段就好摟[4][5]
<httpProtocol>
<customHeaders>
<add name="P3P" value="CP="CAO PSA OUR"" />
</customHeaders>
</httpProtocol>
[1] https://stackoverflow.com/questions/2874078/asp-net-session-sessionid-changes-between-requests
[2] https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx?f=255&MSPPError=-2147217396
[3] https://dotblogs.com.tw/hatelove/archive/2009/12/25/sessionmiss.aspx
[4]https://my.oschina.net/wzzz/blog/170878
[5http://blog.darkthread.net/post-2011-10-27-p3p-header-and-iframe-session.aspx]