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

在 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的请求:

时间: 2024-10-03 22:49:06

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

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

在 WEB 系统中, 我们一般会用session来保存一些简单但是却很重要的信息.比如Asp.net中经常会用Session来保存用户登录信息,比如UserID.为了解决 WEB场大家采用了把session存在DB中,session过期大家一般都采用页面跳转,即再次登录,login后又返回页面.个人觉得以上设计不是很好, 对于web场,如果我们把session存在DB那么新能应该比存内存要慢,所以推荐用分布式缓存的方式来存取Session. 对于Session过期我建议采用cookie来做.在大

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

在Asp.net中,可以有四处设置Session的过期时间:(原文作者:望月狼地址:http://www.cnblogs.com/wangyuelang0526/) 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期. 二.网站级 IIS-网站-具体网站(如DemoSite)-属性-Asp.net,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置

asp中设置session过期时间方法总结

http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载 asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity Framework的背景信息,然后再详细学习如何搭建开发环境. 1.1 MVC和ASP.NET MVC 这本书涵盖Microsoft版本的MVC,即ASP.NET MVC.在写本书的时候,ASP.NET MVC的生产版本为MVC5,因此,本书的示例代码都使用ASP.NET MVC 5编写.在本书中

学习笔记大型《构建高性能web站点》

吞吐率 ab -n1000 -c 100 http://new.dangdang.com/ 测试结果重点关注:1个Requests per second,2个Time per request 影响吞吐率的因素: 并发策略.I/O模型.I/O性能.CPU核数.程序本身逻辑复杂度 1.CPU并发计算 系统负载: cat proc/loadavg 结果:0.00 0.00 0.00 1/130 12041 左边三个数字代表1.5.15分钟的系统负载,数字越小,系统响应速度越快 学习笔记大型<构建高性能

如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[About Layout Pages] 很多网站有些内容需要显示在各个页面中,比如Header,Footer或者告诉用户已经登录的部分.ASP.NET允许你创建一个单独的文件来包含文本.标签和代码的内容块,从而搭建一个风格整齐的网站.接下来你就可以将这个内容块插入到任何你想要让它展示的页面中.采用这种方法

使用ASP在IIS创建WEB站点的函数

程序代码: '=========================================================='函数介绍:创建WebSite'本函数使用ADSI,需要Administrators组用户权限'函数名称:CreateWebSite(Computer,IPAddr,PortNum,HostName,WebSiteDirectory,LogDirectory,WebSiteInfo,GuestUserName,GuestUserPass,StartOrStop)'用法

ASP.NET Web Service中使用Session 及 Session丢失解决方法 续

原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Session,需要对Web Method做如下处理 [WebMethod(EnableSession = true)]public void usingSession(){    Session["Name"] = "Name";} 如果不加EnableSession = tru

[转]菜鸟程序员之Asp.net MVC Session过期异常的处理

本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html 小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动手也了很多代码.现在毕业了,他如愿的加入了T公司,开始了自己的程序员生涯.他信心满满,相信自己4年的学习到的东西,一定能够在工作派上用场,帮助自己很快的胜任现在的工作. 阅读目录: 一.Session引发的异常 二.使用MVC中的Filter来对Session进行验证 三.对于Ajax请求的中,Se