在 WEB 系统中, 我们一般会用session来保存一些简单但是却很重要的信息。比如Asp.net中经常会用Session来保存用户登录信息,比如UserID。为了解决 WEB场大家采用了把session存在DB中,session过期大家一般都采用页面跳转,即再次登录,login后又返回页面。个人觉得以上设计不是很好, 对于web场,如果我们把session存在DB那么新能应该比存内存要慢,所以推荐用分布式缓存的方式来存取Session。 对于Session过期我建议采用cookie来做。在大型网站中Session应该慎用,毕竟它占用服务器的内容,一个人用户session如果占用1k的空间,那么100W用户同时在线 Session要占用多大空间. 以前我把userID 直接存cookie会有浏览器串cookie的问题,比如我用IE login use1,用FF login user2,发现后面login的user信息会覆盖前面login user的值。回来发现session过期了,但是sessionID还在,并且该值在cookie里面。

实现code 如下:

核心code:

string UserID
{

get
{
if (Session["UserID"] != null)
{
return Session["UserID"].ToString();
}
if (Request.Cookies[Session.SessionID.ToString()] != null)
{

string cv=Request.Cookies[Session.SessionID].Value;
Session["UserID"] = cv;
return cv;
}
return string.Empty;
}
set
{
Session["UserID"] = value;
string key = Session.SessionID.ToString();
HttpCookie kc = new HttpCookie(key, value);
kc.HttpOnly = true;
Response.Cookies.Add(kc);
}
}

public partial class WebForm1 : System.Web.UI.Page
{
protected void btnSet_Click(object sender, EventArgs e)
{
Session["name"] = "majiang"; this.lblSet.Text = "Session ID:" + Session.SessionID.ToString();
} protected void btnGet_Click(object sender, EventArgs e)
{
labGet.Text = "Session ID:" + Session.SessionID.ToString();
if (Session["name"] != null)
{
labGet.Text += "<br/>" + Session["name"].ToString();
}
} Dictionary<string, string> dict = new Dictionary<string, string>();
protected void Page_Load(object sender, EventArgs e)
{
dict.Add("", "majiang");
dict.Add("", "Gavin");
} string UserID
{ get
{
if (Session["UserID"] != null)
{
return Session["UserID"].ToString();
}
if (Request.Cookies[Session.SessionID.ToString()] != null)
{ string cv=Request.Cookies[Session.SessionID].Value;
Session["UserID"] = cv;
return cv;
}
return string.Empty;
}
set
{
Session["UserID"] = value;
string key = Session.SessionID.ToString();
HttpCookie kc = new HttpCookie(key, value);
kc.HttpOnly = true;
Response.Cookies.Add(kc);
}
}
protected void btnSetwithCookie_Click(object sender, EventArgs e)
{
UserID = this.txtuserID.Text.Trim();
this.labsetCookie.Text = Session.SessionID.ToString();
} protected void btnGetWithCookie_Click(object sender, EventArgs e)
{
this.labGetCookie.Text = "Session ID:" + Session.SessionID.ToString(); labGetCookie.Text += "<br/>" + dict[UserID].ToString(); }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="SessionTest.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div> <asp:Button ID="btnSet" runat="server" Text="Set Session" OnClick="btnSet_Click" />
<asp:Button ID="btnGet" runat="server" Text="Get Session" OnClick="btnGet_Click" />
<br />
SET: <asp:Label ID="lblSet" runat="server" Text=""></asp:Label>
<br />
Get: <asp:Label ID="labGet" runat="server" Text=""></asp:Label>
</div>
userID:<asp:TextBox ID="txtuserID" runat="server"></asp:TextBox>
<div>
<table>
<tr><td><asp:Button ID="btnSetwithCookie" runat="server" Text="Set With Cookie" OnClick="btnSetwithCookie_Click" /></td><td><asp:Button ID="btnGetWithCookie" runat="server" Text="Get With Cookie" OnClick="btnGetWithCookie_Click" /></td></tr>
<tr><td><asp:Label ID="labsetCookie" runat="server"></asp:Label> </td><td><asp:Label ID="labGetCookie" runat="server"></asp:Label></td></tr>
</table>
</div>
</form>
</body>
</html>

实现的效果如图:

看看HTTP的请求:

大型Web 网站 Asp.net Session过期你怎么办的更多相关文章

  1. 大型Web 站点 Asp.net Session过期你怎么办

    在 WEB 系统中. 我们通常会用session来保存一些简单可是却非常重要的信息.比方Asp.net中常常会用Session来保存用户登录信息,比方UserID.为了解决 WEB场大家採用了把ses ...

  2. 关于web会话中的session过期时间的设置

    关于web会话中的session过期时间的设置 1.操作系统: 步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉右键“属性”——〉主目录——〉配置— ...

  3. 分享:大型Web网站架构演变之9大阶段

    前言 我们以Java Web为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 正文 阶 ...

  4. web 网站安全证书已过期或不可信 是否继续浏览

    发生环境:魅族MX4  uc浏览器 IIS部署SSL证书后提示不可信的解决方案 第一步:打开mmc——点击文件——添加删除管理单元——证书——计算机帐户 第二步:在计算机帐户的个人证书里面导入pfx格 ...

  5. C# asp.net IIS 在web.config和IIS中设置Session过期时间

    有时候在web.config设置sessionState 或者类文件里设置Session.Timeout,在IIS里访问时每次都是达不到时间就超时,原因是因为在IIS中设置了Session的超时时间, ...

  6. java web session过期 跳转页面没有跳出frame的问题

    对于frame页面框架的java web项目,如果session过期执行跳转操作时,只在一个frame中(例如center frame)跳转到设置的login页面了,为了能直接跳转到最初的登录页面,就 ...

  7. asp.net web.config 设置Session过期时间

    在Asp.net中,可以有四处设置Session的过期时间:(原文作者:望月狼地址:http://www.cnblogs.com/wangyuelang0526/) 一.全局网站(即服务器)级 IIS ...

  8. Asp.NET设置Session过期时间的四种方式

    在Asp.net中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分 ...

  9. asp.net中Session过期设置方法

    在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会 ...

随机推荐

  1. ABP-Zero模块

    一.介绍 二.启动模版 三.功能 1,租户管理 2,版本管理 3,用户管理 4,角色管理 5,组织单位管理 6,权限管理 7,语言管理 8,Identity Server集成 一.介绍 1,Zero模 ...

  2. 贝壳找房魔法师顾问[并查集+DAG判断]

    题目链接[https://nanti.jisuanke.com/t/27647] //计蒜客2018复赛D题,想简单了. 题解: 题目是中文的,不再赘述. 题解: 分为三种情况:1.两个字符串都不能变 ...

  3. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  4. CS1.6找金钱和人物血量

    一.查找金钱数量 先搜索800 然后购买东西,再搜索剩下的钱 然后发现有两个地址,一个绿色的地址(也就是静态地址),还有一个动态地址 经过测试后,静态地址的值是对应屏幕上的值,而真正实际的金钱是那个动 ...

  5. Elasticsearch 实现自定义排序插件

    插件入口: package ttd.ugc.plugin; import org.elasticsearch.plugins.Plugin;import org.elasticsearch.scrip ...

  6. MikroTik RouterOS使用U盘安装提示FATAL ERROR: no CD-ROM found Press ENTER to reboot的问题解决

    1.首先说明这个ROS是不能使用U盘安装的,无论你怎么修改都无法实现 2.还是老老实实的刻录iso关盘,或者挂载硬盘到虚拟机上进行安装.又或者使用netinstall进行安装. 3.别去找国外的方法, ...

  7. js文件改变之后浏览器缓存问题怎么解决?

    升级了js文件,很多页面都引用了这个文件,需要主动清除浏览器缓存才会生效,有没有什么办法可以不主动清除就可以? 修改文件名,加上版本号,或 xxx.js?v=0.101

  8. LINUX 内核 API

    http://www.compsoc.man.ac.uk/~moz/kernelnewbies/documents/kdoc/kernel-api/linuxkernelapi.html

  9. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  10. Delphi实例分析:远程传输数据和文件

    在Windows操作系统的平台上,WinSock是首选的网络编程接口,用于在网络上传输数据和交换信息,它构成了Windows操作系统进行网络编程的基础.对于编写网络应用程序来说,WinSock是一门非 ...