如何在.net 4.5.2中将SameSite值设置为None?

时间:2020-06-25 13:26:46

标签: c# .net asp.net-mvc session .net-4.5

从第三方站点用户会话重定向回我的站点时,该会话变为空。 我已检查 Response.Cookies [“ ASP.NET_SessionId”]; 在重定向后设置新值。 默认情况下,ASP.NET_SessionId设置为Lax。 在.net Framework 4.5.2的Session_Start中更改SameSite值的任何可能方法 或可能在任何地方?

2 个答案:

答案 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);