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

在 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("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-09 00:25:21

大型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来做

大型web网站-----系统架构

1.文章背景:有些web网站需要满足客户的高并发请求.大数据量存取等需求,这些情景下需要对网站进行整体架构分析,然后确定符合要求的系统架构方式,包括服务器集群.负载均衡器的选择.数据库集群的架构.缓存服务器的搭建.分布式存储系统.代码分发系统等各方面的内容. 2.大型web网站的系统架构方式   概述:可以参见如下博客(这部分内容略读即可,大概知道其中所涉及的各种技术.概念即可) http://www.cnblogs.com/Mainz/archive/2009/04/28/1445424.ht

Python Flask 快速构建高性能大型web网站项目实战

Python Flask 快速构建高性能大型web网站项目实战视频[下载地址:https://pan.baidu.com/s/1cUggNbUvptYz5vvwBhsdrg ] 作为最最流行的Python Web开发的微框架,Flask独树一帜.它不会强迫开发者遵循预置的开发规范,为开发者提供了自由度和创意空间.突然发现这个对自动化运维开发非常有用,发上来,给大家! Python Flask 快速构建高性能大型web网站项目实战视频 project.zip 第1章 课程介绍1.1-1.2课程导学

大型Web网站架构演变

前言 我们以Java Web为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 正文 阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如Tomcat.Jetty.Jboss,然后直接使用JSP/Servlet技术,或者使用一些开源的框架如Maven + Spring + Struts + Hibernate.Maven + Spring

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 Web网站中App_Code文件夹的作用及使用场景

原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立Web Site项目,使用过的开发者都知道,如果需要新建一个类,例如DataBase.cs.此类只服务于web页面,不适于放入网站自身类库中,因此希望其独立存在于类库之外,只是用于在web应用程序中被web页面调用.这样一来此类最好不要通过形成dll文件,并将其放入bin文件夹以供web页面调用.但

Web Server asp部署网站

Web Server  asp部署网站 一.概述: 二.步骤: 1.iis中创建网站: 2.启用目录(目录浏览) 3.启用父路径(asp) 3.添加index.asp(默认文档) 4.启用32应用程序(程序池) 三.注意事项:

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