cache和session配合实现单点登录的关键代码以及对session存在时间过长的处理
来源:互联网 发布:安锐特监控软件下载 编辑:程序博客网 时间:2024/05/21 15:02
- //实现思路
- //利用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和session配合实现单点登录的关键代码以及对session存在时间过长的处理
- Session的监听以及单点登录整合
- 基于session简单的实现单点登录
- Session和Cookie小结以及PHP单点登陆的实现
- 基于Cookie和session,实现单点登录
- session共享和单点登录 springboot的实践和思考
- 使用Memcache实现Session共享(单点登录)的原理
- 对session的原理解释以及自己实现一个session
- SPRING SESSION实现单点登录
- jsonp+session实现单点登录
- 基于Flask session机制的单点登录
- PHP通过session id 实现session共享和登录验证的代码
- PHP通过session id 实现session共享和登录验证的代码
- Session和Cache的区别
- session和cache的区别
- Session和Cache的区别
- session和cache的区别
- Session和Cache的区别
- 关于Android中shape标签的简单使用
- Mysql-聚簇索排序慢案例分析
- Vim 的插件配置
- gradle 下载太慢解决
- Next Permutation
- cache和session配合实现单点登录的关键代码以及对session存在时间过长的处理
- 张翰才是名副其实的“富豪”,8亿豪宅奢侈至极,郑爽该后悔了
- 集天气预报,TTS,深度学习人脸识别,邮件发送,温湿度采集,消息推送,lcd1602一体的树莓派开源项目
- myeclipse 项目中添加源码jar包 hibernate源码包 struts源码包 spring源码包如同
- STM32F030能不能跑UCOSII
- C# 如何给现有/新建PDF文档添加注释或标注
- Android中顶部Tab带滑动选项卡之二选一,仿淘宝宝贝收藏和店铺收藏
- freemarker的数字格式化
- Runtime.getRuntime().addShutdownHook(Thread hook)的使用