问题描述
HttpCookieauthCookie=FormsAuthentication.GetAuthCookie(userName,false);//得到ticket凭据FormsAuthenticationTicketticket=FormsAuthentication.Decrypt(authCookie.Value);//根据之前的ticket凭据创建新ticket凭据,然后加入自定义信息FormsAuthenticationTicketnewTicket=newFormsAuthenticationTicket(ticket.Version,ticket.Name,ticket.IssueDate,ticket.Expiration,ticket.IsPersistent,userData);stringstr=System.Web.Security.FormsAuthentication.Encrypt(newTicket);//加密身份验票//将新的Ticke转变为Cookie值,然后添加到Cookies集合中authCookie.Value=FormsAuthentication.Encrypt(newTicket);HttpContext.Current.Response.Cookies.Add(authCookie);System.Web.HttpCookieck=newHttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName,str);//获得来到登录页之前的页面,即url中return参数的值stringurl=FormsAuthentication.GetRedirectUrl(userName,true);Response.Redirect(url);
用这种方法存储cookieFormsIdentityidentity=User.IdentityasFormsIdentity;if(identity==null){return;}userName=identity.Name;
两个系统的用户居然串起来用了怎么解决啊
解决方案
解决方案二:
哪里来的两个系统,没看出来
解决方案三:
同域名?同服务器?或者同session服务器?
解决方案四:
引用2楼starfd的回复:
同域名?同服务器?或者同session服务器?
同一个服务器两个系统都是用的这种方法保存的cookieFormsIdentityidentity=User.IdentityasFormsIdentity;if(identity==null){return;}userName=identity.Name;
这段代码是获取登录后的用户名两个系统都一样了
解决方案五:
更换一下登录顺序,看看是不是总是显示后来登录的登录名(值被覆盖),如果是的话,可能就是你这种取值方式的底层实现是用的static变量存储;而如果一直是第一个(后来值更改无效),那就看是不是逻辑或环境有问题
解决方案六:
引用4楼jingshaohui的回复:
更换一下登录顺序,看看是不是总是显示后来登录的登录名(值被覆盖),如果是的话,可能就是你这种取值方式的底层实现是用的static变量存储;而如果一直是第一个(后来值更改无效),那就看是不是逻辑或环境有问题
总是显示后来登录的登录名(值被覆盖),但是我的值不是static变量存储FormsIdentityidentity=User.IdentityasFormsIdentity;stringuserName=identity.Name;
这个你们都没有用过吗
解决方案七:
@starfd大神还在吗
解决方案八:
form安全验证不是很熟悉大神在哪里啊
解决方案九:
引用5楼ww535175584的回复:
Quote: 引用4楼jingshaohui的回复:
更换一下登录顺序,看看是不是总是显示后来登录的登录名(值被覆盖),如果是的话,可能就是你这种取值方式的底层实现是用的static变量存储;而如果一直是第一个(后来值更改无效),那就看是不是逻辑或环境有问题总是显示后来登录的登录名(值被覆盖),但是我的值不是static变量存储FormsIdentityidentity=User.IdentityasFormsIdentity;stringuserName=identity.Name;
这个你们都没有用过吗
那我就没脾气了,你说的情况我只在B/S下用static时遇到过
解决方案十:
引用8楼jingshaohui的回复:
Quote: 引用5楼ww535175584的回复:
Quote: 引用4楼jingshaohui的回复:
更换一下登录顺序,看看是不是总是显示后来登录的登录名(值被覆盖),如果是的话,可能就是你这种取值方式的底层实现是用的static变量存储;而如果一直是第一个(后来值更改无效),那就看是不是逻辑或环境有问题总是显示后来登录的登录名(值被覆盖),但是我的值不是static变量存储FormsIdentityidentity=User.IdentityasFormsIdentity;stringuserName=identity.Name;
这个你们都没有用过吗
那我就没脾气了,你说的情况我只在B/S下用static时遇到过
唉难道我后台和前台不能都用form安全认证吗
解决方案十一:
你断点跟踪,看看生成的sessionid。
解决方案十二:
引用9楼ww535175584的回复:
Quote: 引用8楼jingshaohui的回复:
Quote: 引用5楼ww535175584的回复:
Quote: 引用4楼jingshaohui的回复:
更换一下登录顺序,看看是不是总是显示后来登录的登录名(值被覆盖),如果是的话,可能就是你这种取值方式的底层实现是用的static变量存储;而如果一直是第一个(后来值更改无效),那就看是不是逻辑或环境有问题总是显示后来登录的登录名(值被覆盖),但是我的值不是static变量存储FormsIdentityidentity=User.IdentityasFormsIdentity;stringuserName=identity.Name;
这个你们都没有用过吗
那我就没脾气了,你说的情况我只在B/S下用static时遇到过
唉难道我后台和前台不能都用form安全认证吗
http://referencesource.microsoft.com/你用这个看看FormsIdentity底层源码吧,也许会有帮助
解决方案十三:
两个web.config文件中的这个名称别用相同的
解决方案十四:
解决方案十五:
应该是cookies的名称相同问题导致的。