以其他用户身份登录时丢失会话/ cookie
我正在构建dnn
模块,允许登录用户以其他用户身份登录。
但我这里有一些有线问题。
这是我注销当前用户和以其他用户身份登录的方式:
UserInfo userInfo = UserController.GetUserById(portalId, userId); if (userInfo != null) { DataCache.ClearUserCache(this.PortalSettings.PortalId, Context.User.Identity.Name); if (Session["super_userId"] == null) { Session["super_userId"] = this.UserId; Session["super_username"] = this.UserInfo.Username; } HttpCookie impersonatorCookie = new HttpCookie("cookieName"); impersonatorCookie.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(impersonatorCookie); Response.Cookies["cookieName"]["super_userId"] = this.UserId.ToString(); Response.Cookies["cookieName"]["super_username"] = this.UserInfo.Username; PortalSecurity objPortalSecurity = new PortalSecurity(); objPortalSecurity.SignOut(); UserController.UserLogin(portalId, userInfo, this.PortalSettings.PortalName, Request.UserHostAddress, false); Response.Redirect(Request.RawUrl, true); }
在PageLoad()
我尝试从这个cookie读取值,但它没有读取任何内容:
try { string super_userId = Request.Cookies["cookieName"]["super_userId"]; string super_username = Request.Cookies["cookieName"]["super_username"]; if (!String.IsNullOrEmpty(super_userId)) { this.Visible = true; this.lblSuperUsername.Text = Session["super_username"].ToString(); this.txtPassword.Enabled = true; this.btnBackToMyAccount.Enabled = true; } ...
我也试过用会话做同样的事情,但没有任何作用,我无法理解为什么?
正如我在这里找到的那样,在重定向的请求中设置cookie可能会出现问题,并且声明当域名不是/
时,cookie不会通过重定向设置。
因此,您可以尝试不使用HTTP标头重定向,但显示“登录”页面,而不是包含“主页”链接和元刷新或Javascript重定向 。
顺便说一句,在cookie中设置UserID并不是真正的方法。 如果我将cookie值更改为1
怎么办?
我建议你设置一个新的cookie来始终设置Domain
,可能还有Expires
。
Response.Cookies[cookieName].Domain = RootURL; Response.Cookies[cookieName].Expires = DateTime.UtcNow.AddDays(cDaysToKeep);
该域名非常重要,可以是子域名的url,例如只有mydomain.com
,而不是www.
因为如果从www.mydomain.com设置了cookie并且您尝试从mydomain.com读取它,反之亦然,那么cookie将不会被读取并且您可能丢失它/覆盖它。
所以我建议创建一个函数,当你设置一个cookie时,你设置至少3个参数, Domain
, Expires
和Value
。
类似的问题和答案:
使用相同登录数据库的多个应用程序相互记录
登录到另一个实例时登出的asp.net表单身份validation
把这两个陈述
Response.Cookies["cookieName"]["super_userId"] = this.UserId.ToString(); Response.Cookies["cookieName"]["super_username"] = this.UserInfo.Username;
后
UserController.UserLogin(portalId, userInfo, this.PortalSettings.PortalName, Request.UserHostAddress, false);
可能是UserLogin方法正在重置Session变量。 希望能帮助到你 :)
- 在十进制值上执行Math.Round(x,2),但需要确保小数点后的2个数字作为其金额
- gridview控件上的自定义分页
- 尝试将IList转换为List以便AddRange
- 实现Custom MembershipUser和Custom MembershipProvider
- 在ASP.NET(C#)中实现安全,独特的“一次性”激活URL
- 当客户端连接到’localhost’上的服务时,为什么System.Net.ServicePoint.ConnectionLimit使用’7FFFFFFF’(Int32.MaxValue / 2147483647)?
- Silverlight 4:将文件上传到服务器
- system.web.mail vs system.net.mail
- 如何确保SQL能够读取所有XML标记数据