FormsAuthentication Cookie 未保存
FormsAuthentication Cookie Not Saving
我有两个登录页面。一份给管理员用户,一份给客户。
他们都执行以下代码(在授权后)将 cookie 添加到 Response
。然后这两个页面重定向到提供的URL(我不在此处进行重定向,因为我对管理员进行了一些额外检查)
public static string SetAuthCookie<T>
(this HttpResponse responseBase, string name, bool rememberMe, T userData)
{
/// In order to pickup the settings from config, we create a default cookie
/// and use its values to create a new one.
var cookie = FormsAuthentication.GetAuthCookie(name, true);
var ticket = FormsAuthentication.Decrypt(cookie.Value);
var newTicket = new FormsAuthenticationTicket(
ticket.Version,
ticket.Name,
ticket.IssueDate,
ticket.Expiration,
true,
Newtonsoft.Json.JsonConvert.SerializeObject(userData),
ticket.CookiePath
);
var encTicket = FormsAuthentication.Encrypt(newTicket);
/// Use existing cookie. Could create new one but would have to copy settings over...
cookie.Expires = (rememberMe ? DateTime.Now.AddDays(62) : DateTime.MinValue);
cookie.Value = encTicket;
responseBase.Cookies.Set(cookie);
return FormsAuthentication.GetRedirectUrl(name, true /*This Is Ignored*/);
}
管理员
现在管理员按照它说的去做。添加 cookie 并重定向到管理员欢迎屏幕。
客户
客户登录区域只是不一样(见下面的屏幕截图)。
- 它发布(如您所见,它收到了保存 cookie 的请求)
- 它重定向
- 但是,哦不,下一个请求没有 cookie
- 系统看不到用户已通过身份验证
- 我们回到登录屏幕
我认为可能是本地浏览器的问题。
不,尝试过:不同的浏览器,使用 private/incognito.
我还以为是cookie的设置问题
怎么可能?他们都使用相同的代码。
也许 web.config
(在他们受人尊敬的目录中)?
不,只是 <authorization>
规则
可能是 cookie 有问题?
不,看起来不错。相同的域,HTTPS。都很好
与RememberMe
有关吗?
不,有和没有
都试过了
太棒了....太傻了。
我忘记排除 ([JsonIgnore]
) 一个 属性 获取一些额外数据(设置 cookie 不需要)。这被包括在内,显然,这使我的 cookie 太大而无法保存。
糟糕。
我有两个登录页面。一份给管理员用户,一份给客户。
他们都执行以下代码(在授权后)将 cookie 添加到 Response
。然后这两个页面重定向到提供的URL(我不在此处进行重定向,因为我对管理员进行了一些额外检查)
public static string SetAuthCookie<T>
(this HttpResponse responseBase, string name, bool rememberMe, T userData)
{
/// In order to pickup the settings from config, we create a default cookie
/// and use its values to create a new one.
var cookie = FormsAuthentication.GetAuthCookie(name, true);
var ticket = FormsAuthentication.Decrypt(cookie.Value);
var newTicket = new FormsAuthenticationTicket(
ticket.Version,
ticket.Name,
ticket.IssueDate,
ticket.Expiration,
true,
Newtonsoft.Json.JsonConvert.SerializeObject(userData),
ticket.CookiePath
);
var encTicket = FormsAuthentication.Encrypt(newTicket);
/// Use existing cookie. Could create new one but would have to copy settings over...
cookie.Expires = (rememberMe ? DateTime.Now.AddDays(62) : DateTime.MinValue);
cookie.Value = encTicket;
responseBase.Cookies.Set(cookie);
return FormsAuthentication.GetRedirectUrl(name, true /*This Is Ignored*/);
}
管理员
现在管理员按照它说的去做。添加 cookie 并重定向到管理员欢迎屏幕。
客户
客户登录区域只是不一样(见下面的屏幕截图)。
- 它发布(如您所见,它收到了保存 cookie 的请求)
- 它重定向
- 但是,哦不,下一个请求没有 cookie
- 系统看不到用户已通过身份验证
- 我们回到登录屏幕
我认为可能是本地浏览器的问题。
不,尝试过:不同的浏览器,使用 private/incognito.
我还以为是cookie的设置问题
怎么可能?他们都使用相同的代码。
也许 web.config
(在他们受人尊敬的目录中)?
不,只是 <authorization>
规则
可能是 cookie 有问题?
不,看起来不错。相同的域,HTTPS。都很好
与RememberMe
有关吗?
不,有和没有
太棒了....太傻了。
我忘记排除 ([JsonIgnore]
) 一个 属性 获取一些额外数据(设置 cookie 不需要)。这被包括在内,显然,这使我的 cookie 太大而无法保存。
糟糕。