[ASP.NET MVC] 每次從controller請求action SessionID每次都會變動

由於登入系統是透過SSO進行驗證 驗證完後儲存使用者資訊  

卻發現每次請求Action SessionID都在變動 無法取得之前所儲存的使用者資訊

 

一開始我會先跟controller要求頁面

而這個頁面會在init的時候再跟controller要求其他的資料   觀察發現sessionID一直在變動  Log如下

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

2017/09/06 補充

後來發現在第一次進網頁的時候 session還是會亂跳  後來發現是使用Iframe的問題

在web.config加上這段就好摟[4][5]

<httpProtocol>
    <customHeaders>
        <add name="P3P" value="CP=&quot;CAO PSA OUR&quot;" />
    </customHeaders>
</httpProtocol>
Reference

[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]