从第三方站点用户会话重定向回我的站点时,该会话变为空。 我已检查 Response.Cookies [“ ASP.NET_SessionId”]; 在重定向后设置新值。 默认情况下,ASP.NET_SessionId设置为Lax。 在.net Framework 4.5.2的Session_Start中更改SameSite值的任何可能方法 或可能在任何地方?
答案 0 :(得分:4)
将选项与.net框架的较早版本一起解决此约束
HttpContext.Current.Response.Headers.Append("set-cookie", $"{key}={value}; path=/; SameSite=Strict; Secure");
是用于使用定义的SameSite手动设置标题的一种选项。在上方,键是cookie名称,值是cookie值
或者:
myCookie.Path = "/; SameSite=Strict; Secure";
我已经测试了这些选项,它们似乎都可以工作
上面列出的值仅作为示例,您需要提供适当的值[Lax | Strict | None | etc]。安全标志指示其仅通过https传输。嗯
答案 1 :(得分:0)
您可以在 web.config 文件中设置 cookieSameSite 属性:
<system.web>
<httpCookies sameSite="None"/>
<sessionState cookieSameSite="None" />
如果您使用表单身份验证,您也可以对 web.config 文件中的 auth-cookie 执行此操作:
<authentication mode="Forms">
<forms cookieSameSite="None" />
</authentication>
例如在 SSRS 中:
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="3000" path="/" cookieSameSite="None">
</forms>
</authentication>
如果你在代码中为 System.Web.HttpCookie 做这件事,你可以滥用 cookie-path 来设置 same-site 属性:
authCookie.Path = "/; SameSite=None";
例如
string userName = "MY_USER";
bool createPersistentCookie = true;
string strCookiePath = "/";
System.Web.HttpCookie authCookie = System.Web.Security.FormsAuthentication.GetAuthCookie(userName, createPersistentCookie, strCookiePath);
// intranet urls most of the times should not contain a dot
// so this means if(not intranet)
// if (current.Request.Url.Host.Contains("."))
// secure can only be set when protocol is https
if ("https".Equals(current.Request.Url.Scheme, System.StringComparison.InvariantCultureIgnoreCase))
{
//authCookie.Path = "/; SameSite=Strict";
authCookie.Path = strCookiePath + "; SameSite=None";
authCookie.Secure = true;
}
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);