cache和session配合实现单点登录的关键代码以及对session存在时间过长的处理
2016-12-12 16:35
393 查看
//实现思路
//利用Cache的功能,把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。
//代码如下 :
protected void Button1_Click(object sender, EventArgs e)
{
string userName = this.txtUserName.Text;
string password = txtPassWord.Text;
if (Page.IsValid == true)
{
if (IsLogin(userName, password))
// Response.Redirect("css/error.aspx?" + "&ErrorMessage=" + "用户已经登录,请重新输入!");
Response.Write("<h2 style='color:red'>用户已经登录,请重新输入!");
else
if (userName == "1" && password == "1")
{
Response.Write("<h2 style='color:red'>你好,登录成功!");
}
}
}
private bool IsLogin(string UserCode, string UserName)
{
string ExistsUser = Convert.ToString(Cache[UserCode]);
if (ExistsUser == null || ExistsUser == String.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
HttpContext.Current.Cache.Insert(UserCode, UserName, null, DateTime.MaxValue, SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable, null);
Session["User"] = UserCode;
return false;
}
else
{
return true;
}
}
}
但是有一个问题就是session存在的时间很长,如果用户不主动注销,那么直接关闭浏览器以后,就会导致用户无法登录。
看了学长博客,得到了启发,我们可以采取这样一个方法,如果用户没有主动的注销,让它打开网页变保持登录就好。
在page_load事件里面添加如下代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str_User = Convert.ToString(Cache[Convert.ToString(Session["User"])]);
// Cache中没有该str_Key的项目,表名用户没有登录,或者已经登录超时
if (str_User != String.Empty)
{
Response.Write("<h2 style='color:red'>你好,登录成功!");
}
}
//以下是清理Cache
//System.Web.Caching.Cache _cache = HttpRuntime.Cache;
//_cache.Remove("1");
_cache.Remove(key);
}
//实现思路
//利用Cache的功能,把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。
//代码如下 :
protected void Button1_Click(object sender, EventArgs e)
{
string userName = this.txtUserName.Text;
string password = txtPassWord.Text;
if (Page.IsValid == true)
{
if (IsLogin(userName, password))
// Response.Redirect("css/error.aspx?" + "&ErrorMessage=" + "用户已经登录,请重新输入!");
Response.Write("<h2 style='color:red'>用户已经登录,请重新输入!");
else
if (userName == "1" && password == "1")
{
Response.Write("<h2 style='color:red'>你好,登录成功!");
}
}
}
private bool IsLogin(string UserCode, string UserName)
{
string ExistsUser = Convert.ToString(Cache[UserCode]);
if (ExistsUser == null || ExistsUser == String.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
HttpContext.Current.Cache.Insert(UserCode, UserName, null, DateTime.MaxValue, SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable, null);
Session["User"] = UserCode;
return false;
}
else
{
return true;
}
}
}
但是有一个问题就是session存在的时间很长,如果用户不主动注销,那么直接关闭浏览器以后,就会导致用户无法登录。
看了学长博客,得到了启发,我们可以采取这样一个方法,如果用户没有主动的注销,让它打开网页变保持登录就好。
在page_load事件里面添加如下代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str_User = Convert.ToString(Cache[Convert.ToString(Session["User"])]);
// Cache中没有该str_Key的项目,表名用户没有登录,或者已经登录超时
if (str_User != String.Empty)
{
Response.Write("<h2 style='color:red'>你好,登录成功!");
}
}
//以下是清理Cache
//System.Web.Caching.Cache _cache = HttpRuntime.Cache;
//_cache.Remove("1");
_cache.Remove(key);
}
相关文章推荐
- struts2中设置session及其有效期时间以及清除session实现退出登录
- 地磅称量系统之(27~29)实现主界面显示用户的登录信息和日期时间星期的代码
- eShop电子商城的SSH实现的用户模块(1)登录和注册配置文件和页面关键代码(V...
- kphp框架中实现自定义session会话处理方法的php和msyql代码分享
- cookie在web应用中实现上次登录时间以及上次访问时间 小案例理解cookie
- 网上代码研究后修改的PHP登录程序,关闭浏览器session清空,可以设置cookies时间
- js用Date对象处理时间实现思路及代码
- PHP通过session id 实现session共享和登录验证的代码
- Struts2 拦截器实现用户登录(关键代码)
- PHP通过session id 实现session共享和登录验证的代码
- 网上代码研究后修改的PHP登录程序,关闭浏览器session清空,可以设置cookies时间
- 实现session登陆时间的验证,验证用户登录页面的一个监听器
- PHP通过session id 实现session共享和登录验证的代码
- PHP通过session id 实现session共享和登录验证的代码
- 代码实现Lable 、textField创建界面以及键盘的处理
- 网上代码研究后修改的PHP登录程序,关闭浏览器session清空,可以设置cookies时间
- 代码实现Lable 、textField创建界面以及键盘的处理
- C#中用session实现的用户登录代码与退出登录代码
- 视频二值化处理基本方法以及简单代码实现
- asp.net 使用一般处理程序和ajax post实现登录以及记住密码