现在系统的注销是这样的,将Session清空,并指向登录页面:
Session.RemoveAll();
string script = "location.reload('Login.aspx')";这样的注销在IE里没问题,用户在登陆的时候照样走Login.aspx里的if(!IsPostBack).一拿世界之窗问题就来了:
比如说拿A帐号登录一次,再拿B帐号登录一次;这两次都还走Login.aspx里的if(!IsPostBack),第三次要是再拿A帐号的话首页加载的时候就不走if(!IsPostBack)了.(本人知道世界之窗有时候注销时Session注销不了,但别人就是要用这浏览器.)
Session.RemoveAll();
string script = "location.reload('Login.aspx')";这样的注销在IE里没问题,用户在登陆的时候照样走Login.aspx里的if(!IsPostBack).一拿世界之窗问题就来了:
比如说拿A帐号登录一次,再拿B帐号登录一次;这两次都还走Login.aspx里的if(!IsPostBack),第三次要是再拿A帐号的话首页加载的时候就不走if(!IsPostBack)了.(本人知道世界之窗有时候注销时Session注销不了,但别人就是要用这浏览器.)
<哪位高人知道怎样写注销才能解决这个问题,并且适应于任何浏览器!请把代码贴出来下.谢谢解答了!>
解决方案 »
- 谁来解释一下,为啥“若要调试此模块,请将其项目生成配置更改为“调试”模式”还是不好使哪?
- JavaScript新手 getTreeNode问题 (对象不支持此属性或方法)
- 急救!!WML "Bad WML syntax. 'Fatal Error. Ln 1, Col 1 The main XML document cannot be empty'."错误
- 如何将自己网页上的数据传递到别人网页中提供的输入文本框中??
- 我想实现DropDownList的无刷新,取得它的值赋值给一个文本框,每单击一次选择一个选项,文本框就显示它的值,但如何做到无刷新,最好有个例子,谢谢
- 怎样限制ASP.NET应用程序只能在一台机器上安装一次?
- 实习生求救
- 关于windows身份认证的问题
- 为什么老是出现“XX已在多处定义”的警告呢
- 问2个关于水晶报表的问题
- 1000RMB 求个MAPXTREME2005 的例子
- 求网页的鼠标分页代码,像pageControl之类的控件效果的那种
改为
response.redirect("Login.aspx")
通过票证的方法,具体代码如下:
public void Login(string username,string password,string backUrl)
{
//判断该用户是否已经登录,如果登录了就不能再次登录(暂时没有完成!)
if(UserBLL.IsLogined(username))
{
this.ShowMessage("该帐号已经登录!",Util.Config.ApplicationPath + "/Login.aspx");
}
else
{
bool isLogin = UserBLL.Login(username,password);
if(isLogin==true)
{
SetLoginCache(username); //获取该用户的角色列表(逗号分割)
string roleauth = RoleBLL.GetUserRole(username); //生成票证
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1, // version
username, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(20),// Expiration
false, // Persistent
roleauth,"/"); // User data
//加密 存入Cookie
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);
Response.Cookies.Add(authCookie); if(backUrl == string.Empty)
{
Response.Redirect( FormsAuthentication.GetRedirectUrl(username,false));
}
else
{
Response.Redirect(backUrl);
}
}
else
{
if(backUrl == string.Empty)
{
Response.Write("<script>alert('密码错误或者用户名不存在!');location.href = '"+Request.RawUrl+"';</script>");
}
else
{
Response.Write("<script>alert('密码错误或者用户名不存在!');location.href = '"+backUrl+"';</script>");
}
}
}
} /// <summary>
/// 设置用户登录信息
/// 1、如果该帐号已经在别处登录,则覆盖原来已登录用户的信息(设置Hashtable的值为该帐号的对应的键值为XXXXXX)
/// 2、如果该帐号没有被登录,则设置以当前Session ID作为键的值为该帐号
/// </summary>
/// <param name="userName"></param>
private void SetLoginCache(string userName)
{
Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline != null)
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
string strKey = "";
while(idE.MoveNext())
{
if(idE.Value != null && idE.Value.ToString()==userName)
{
//该帐号已经被登录
strKey = idE.Key.ToString();
//将第一个人登陆的SessionID对应的用户名强制变更为XXXXXX
hOnline[strKey] = "XXXXXX";
break;
}
}
}
else
{
hOnline = new Hashtable();
}
hOnline[Session.SessionID] = userName;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}
string script = "location.reload('Login.aspx')";
改为
response.redirect("Login.aspx")
FormsAuthentication.SignOut();
Session.Abandon();
Session.RemoveAll();
Session.Abandon();
Session.RemoveAll();
一般在IE和ff上测试,世界之窗没用过,也没考虑过。