FormsAuthentication 票据前后台登录导致掉线

时间:2022-12-24 17:28:43

一、前后台的用户信息都是采用.NET自带的FormsAuthentication 的ticket存取用户信息,

但是如果前后台用相同的用户使用票据这个会导致一方登陆后另一方会掉线,需要重新登陆。

二、问题分析

为什么会掉线呢?

可能是因为相同的用户名存的Cookie一样导致把另一个替换了吧?

后台是前台的子站,但是他们用的不是一个应用程序池,应该不会替换的呀。

结果把应用程序池换了还是会掉线。

后来想着前后台的票据虽然是不是同一个应用程序池,但是他们的票据名称是一样,能不能让他们的票据名不一样呢。

后来把webconfig 的authentication 节点的<forms>子节点上加了个name属性 标识了这个票据的名字。同样后台也加了一个,不过名字不一样。

结果奇迹发生了,不掉线了。

三、结论

事实证明,如果多个站点同时使用票据,为了避免站点之间互相替换cookie名,每个站点都应该给票据单独一个特定的标识名。

四、花絮:

票据使用方法

public void SetAuthenticationToken(string name, string userdata, bool createPersistentCookie = false)
{
FormsAuthentication.SetAuthCookie(name, true, FormsAuthentication.FormsCookiePath);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, name.ToString(), DateTime.Now, DateTime.Now.AddDays(1), true, userdata);
string encTicket = FormsAuthentication.Encrypt(authTicket);
this.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
}