如標題,已爬文大概網路上都如黑暗大大說的,實測結果無效。
猜測可能是狀況不一樣所以無效......
https://blog.darkthread.net/blog/p3p-header-and-iframe-session/
今天遇到一個小問題...想請各位武林高手幫忙。
使用技術Asp.net webform & C#。
開發環境VS2017,開啟新的空白webform專案 debug測試下方問題。
狀況
描述: session在Default.aspx還存在,轉址之後再top.aspx就消失了..,但是按下F5 session又出現了,懇請各路大大解惑
Default.aspx
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Headers.Add("P3P", "CP=\"NOI ADM DEV COM NAV OUR\"");
Session["AA"] = "alonso";
Response.Redirect("Main.htm");
}
}
}
"Main.htm"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>入口網站</title>
</head>
<!--
<frameset rows="54,*,27" >
-->
<frameset rows="55,*">
<frame src="top.aspx" frameborder="0" marginheight="0" noresize="True" scrolling="no">
<frameset cols="185,*" border="0">
<frame src="menu.aspx" scrolling="yes" marginwidth="0" marginheight="10" frameborder="0">
<frame src="Content.aspx" name="Content" frameborder="0">
</frameset>
<!--
<frame src="bottom.aspx" noresize="True" marginheight="0" frameborder="0" >
-->
</frameset>
<body>
</body>
</html>
top.aspx
public partial class top : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Headers.Add("P3P", "CP=\"NOI ADM DEV COM NAV OUR\"");
Response.Write(Session["AA"]);
}
}
=====================
更新1
自己測試發現第一次 get 有setcookie
去了別的網頁又回來,第二次,沒有set cookie.... ==> 在GET一次就正常了
更新2
目前發現,在第二次GET的地方,session id沒有在 top.aspx的http header出現...
必須再點一次get才會出現...
更新3
在webconfig的sessionState設定為cookieSameSite="None",解決問題。
But這樣似乎太危險.....還是要想辦法...
你有把ASP.NET的Session
改到用ASP.NET狀態服務嗎?
修改 web.config 檔
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=localhost:42424"
cookieless="false"
timeout="30"/>
</system.web>
</configuration>
1.「開始」→ 「設定」→「控制台」 → 「系統管理工具」 → 「服務」
2.「ASP.NET 狀態服務」 或 「ASP.NET State Service」
3. 「啟動類型」 改為「自動」後,「套用」再直按「啟動」即可。