分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

.NET实现单个或几个Session过期时间设置简单方案

发布时间:2023-09-06 01:41责任编辑:赖小花关键词:.NET

  .NET下Session使用很简单,对写入Session值无类型限制,设置Session有效时间也很简单,直接设置Session的timeout属性即可,类型为int,单位为分钟。

1 ????????????Session["time"] = DateTime.Now.ToString("yyyymmddHHMMss");2 ????????????Session.Timeout = 60;

但若要设置多个有效时间不同的Session,就不那么友好了。后设置的有效时间会覆盖之前值

1 ????????????//写入用户登录状态到Session。2 ????????????Session["state"] = "On";3 ????????????//设置用户登录状态有效时间为1天,除非登录清空Session,否则整天登录状态有效。4 ????????????Session.Timeout = 60 * 24;5 6 ????????????//设置类似验证码类似的session,假设有效时间为1分钟。7 ????????????Session["time"] = DateTime.Now.ToString("yyyymmddHHMMss");8 ????????????Session.Timeout = 1;

如上,设置了两个Session,两个Session有效时间不同,后写入Session有效时间一定会覆盖前面写入Session有效时间。

简易解决思路

  构建结构为:

   1 Tuple.Create<string, object, int>(key, value, time) 

的tuple元组,将tuple写入Session中。(按照顺序依次代表session名、写入值、有效时间)

1 ????????private void SetSingleSession(string key , object value, int? timeout)2 ????????{3 ????????????int time = timeout ?? Session.Timeout;4 ????????????var tuple = Tuple.Create<string, object, int>(key, value, time);5 ????????????Session[key] = tuple;6 ????????}

  但这样设置存在一个问题,的确写入值到Session,但并没有实现Session的功能。

也就是说,这个Session有效时间并不会到达有效时间后就失效!!!这很关键,怎么办呢?有个关键点必须注意到,一定不能修改Session的timeout参数。

  在此考虑的替代方案是:写入时根据传入有效时间计算出过期时间,将过期时间存入,获取Session时判断是否已经超过过期截止时间,超过返回空,并且清空Session。

重写SetSingleSession方法

1 ????????private void SetSingleSession(string key, object value, int? timeout)2 ????????{3 ????????????int time = timeout ?? Session.Timeout;4 ????????????DateTime endTime = DateTime.Now + new TimeSpan(0,time,0);5 ????????????var tuple = Tuple.Create(key, value, endTime);6 ????????????Session[key] = tuple;7 ????????}

获取Session方法

1 ????????private object GetSingleSession(string key)2 ????????{3 ????????????var tuple = Session[key] as Tuple<string, object, DateTime>;4 ????????????var diff = DateTime.Compare(tuple.Item3, DateTime.Now);5 ????????????object result = null;6 ????????????if (diff > 0) result = tuple.Item2;//有效时间截止之前正常返回值7 ????????????else Session.Remove(key);//超过有效时间清空Session8 ????????????return result;9 ????????}

  只是一个基础的方案,后续有更好的方案再更新。

.NET实现单个或几个Session过期时间设置简单方案

原文地址:https://www.cnblogs.com/fuxuyang/p/8416578.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved