在 WEB 系统中。 我们通常会用session来保存一些简单可是却非常重要的信息。比方Asp.net中常常会用Session来保存用户登录信息,比方UserID。为了解决 WEB场大家採用了把session存在DB中,session过期大家一般都採用页面跳转,即再次登录,login后又返回页面。

个人认为以上设计不是非常好, 对于web场,假设我们把session存在DB那么新能应该比存内存要慢。所以推荐用分布式缓存的方式来存取Session。 对于Session过期我建议採用cookie来做。在大型站点中Session应该慎用,毕竟它占用server的内容。一个人用户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("1", "majiang");
dict.Add("2", "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的请求:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

    在 WEB 系统中, 我们一般会用session来保存一些简单但是却很重要的信息.比如Asp.net中经常会用Session来保存用户登录信息,比如UserID.为了解决 WEB场大家采用了把sess ...

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

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

  3. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  4. 基于.NET的大型Web站点StackOverflow架构分析(转)

    Stack Overflow网址:http://stackoverflow.com/ 当前访问量:每月9500PV(每天300多万PV) 当前Alexa排名:149 所用.NET技术:C#.Visua ...

  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. [ASP.Net] MVC2,3,4,5的不同

    现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...

  2. HDU2080 夹角有多大2

    2019-05-17 15:00:09 加油加油,fightting !!! 这道题不知道acos()函数,acos()返回的是弧度,转化成度数要 / PI * 180 也没有想到通过向量 但是想到了 ...

  3. jupyter在特定环境特定目录中启动

    代码如下: @echo off start %windir%\System32\cmd.exe "/c" D:\Anaconda\Scripts\activate.bat # 启动 ...

  4. BZOJ 3065 替罪羊树+动态开节点线段树

    思路: RT 可以看VFK的题解 我写了半天拍了半天... 不过是$nlog^2n$的 要写垃圾回收的 线段树 如果某个节点的sum是0  也可以free掉 //By SiriusRen #inclu ...

  5. [XJOI]noip44 T3还有这种操作

    还有这种操作 ttt 最近在学习二进制, 他想知道小于等于N的数中有多少个数的二进制表示中有偶数个1. 但是他想了想觉得不够dark,于是他增加了若干次操作,每次操作会将一个区间内的0变1 , 1变0 ...

  6. Aspose.Words将Word模板打印出来

    利用Aspose.Words将制作好的模板,输出出来自己所需的文件 /// <summary> /// 打印信息和列表 /// </summary> /// <param ...

  7. (转载) IaaS, PaaS, Saas

    如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序. 现在你追随潮流,采用流行的云计算,如果你采用 IaaS 服务,那么意味着你就不用自 ...

  8. UML+模式设计概述

    转自于:http://blog.csdn.net/rexuefengye/article/details/13020225 工程学:工程庞大到一定程度必须是用工程学方法,好比直接用水泥沙子建设实用的摩 ...

  9. 02--linux操作系统基础学习笔记

    linux是一种操作系统. 嵌入式系统是以应用为中心的,以计算机技术为基础并且软硬件可剪裁,专用计算机系统. 内核下载网站 https://www.kernel.org/ https://www.ke ...

  10. 脚本自动化部署varnish源码包

    #!bin/bash#功能:自动化部署 varnish 源码包软件,运行脚本前,需提前下载 varnish-5.0.0.tar.gz#作者:liusingbonyum -y install gcc r ...