SESSION的持久处理,希望大家多指正
之前发了个帖子,抱怨在招聘过程中面试人员对SESSION处理的问题,引起园子里几位大佬的注意。网上关于SESSION持久处理讲的最多的是用SQLSERVER存在数据库里面,上午同园子里兄弟探讨了如何让SESSION持久的问题,总结一下。
SESSION持久的方式
1.SQLSERVER存储;
2.将SESSIONID存放在APPLICATION中;
3.在服务器预设的超时前自动刷新页面;
4...........(可能还有);
下面说下几种方式
第一种方式,微软推荐实现,在实际做项目时候还要搞来搞去,麻烦,大家可以参阅文档看看怎么实现。
第二种方式,可以有效的降低WEB服务器的请求量,但是对于内存资源会有一些浪费。假象系统一共是300个用户,用户关闭系统的时候大多都是通过直接X关闭,非常稀有有人点LOGOUT退出,处理的好点,那就需要捕获X然后用AJAX向服务器发送SESSION结束的指令。对于非正常比如直接冷启动、热启动,直接“开始”-“关机”就没有什么效果,造成一定内存的浪费。
/**************************代码开始*******************************/
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Form["login"] == "登 录")
{
Session["login"] = "1";
Session["normal"] = "1";
Application[Session.SessionID] = Session;
}
if (Session["login"] == null)
{
Session["login"] = ((System.Web.SessionState.HttpSessionState)Application[Session.SessionID])["login"];
}
Response.Write("不丢失的Session" + Session["login"]);
if (Session["normal"] == null)
{
Response.Write("Session丢失啦");
}
else
{
Response.Write("会丢失的Session" + Session["normal"]);
}
}
login.htm 简单的登录页面
<form action="Default.aspx" method="post">
<input type="submit" value="登 录" name="login" />
</form>
Web.config 加快测试的。
<sessionState timeout="1"></sessionState>
/**************************代码结束*******************************/
第三种方式,完全动态的判断用户是否在线,由WEB服务器根据是否TIMEOUT来销毁SESSION。但是试想同时如果有上百上千用户在线时候,每人一个刷新,将给通讯、WEB服务器带来多大的负载。
具体实现就是在系统中一个比如放置系统名称或者显示当前登录人登陆身份的页面地方放置一段JAVASCRIPT,定时去刷新自己或者刷新一个WIDTH=0,HEIGHT=0的IFRAME。
因此,三种方法各有所长,大家可以根据实际项目或者环境来选择一种合适的自己的SESSION持久处理方式。
双喜 VS 骆驼
浙公网安备 33010602011771号