文档章节

asp.net中session的原理及应用

短短的歼击机
 短短的歼击机
发布于 2014/08/24 19:05
字数 1199
阅读 5094
收藏 1

Session简介丶特性


1.Session是一种Web会话中的常用状态之一。

2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象。

3.每个客户端的Seesion是独立存储的。

4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的。

5.Session不能跨进程访问,只能由该会话的用户访问。应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的。

6.当会话终止,或过期时,服务器就清除Session对象。

7.Session常用于保存登录用户的ID.

8.Session保存的数据是跨页面全局型的。


Session的使用


这里我写入一个例子,便于下面阐述。

 

复制代码

<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        function getSessionClick(action) {   //这个函数是为了知道哪一个提交按钮被点击            $("#hidlgc").val("");  //清空隐藏值            $("#hidlgc").val(action);   //给隐藏控件赋值        }    </script></head><body>
    <form id="form1" method="post" action="MySession.aspx">
         <table>
            <tr>
                <td>账号:</td><td><input type="text" name="txtUid" /></td>`            </tr>
             <tr>
                <td>密码:</td><td><input type="password" name="txtPwd" /></td>
             </tr>
             <tr>                
                <td colspan="2">
                    <input type="hidden" value="" id="hidlgc" name="hidlgclick" />  
                    <input onclick="getSessionClick('lgclick')" type="submit" value="登录" />
                    <input type="submit" onclick="getSessionClick('getSession')" value="获取session" />
                    <input type="submit" onclick="getSessionClick('backLg')" value="退出登录" />
                </td>
             </tr>
         </table>
    </form></body>

复制代码

 

复制代码

protected void Page_Load(object sender, EventArgs e)
        {            //把用户id写入session中
            if (Request.Form["hidlgclick"] == "lgclick")
            {                if(Request.Form["txtUid"].ToString()=="admin"&&Request.Form["txtUid"].ToString()=="admin") //判断用户登录                {
                    Session["userName"] = Request.Form["txtUid"].ToString();  //把用户id保存到session中
                    Response.Write(Session["userName"].ToString()+"---点击登录"); //获取session,并写入页面                }
            }            //获取Session
            if (Request.Form["hidlgclick"] == "getSession")
            {                if (Session["userName"] != null)
                {
                    Response.Write(Session["userName"].ToString() + "---点击获取session"); //获取session,并写入页面                }
            }            //取消当前会话,相当于注销(退出登录)。
            if (Request.Form["hidlgclick"] == "backLg")
            {
                Session.Abandon();
            }
        }

复制代码

  <system.web>
    <sessionState timeout="40"></sessionState>  <!---设置session的过期时间,时间以分钟为单位-->


Session原理(根据上面例子阐述)


 

一、session是怎么存储,提取的?

1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。

2.输入正确的账号密码,点击登录,页面就会输出  “admin --- 点击登录”

二、Session池中每个客户端的数据是怎么存储的?

1.存储在Session池中的数据是全局型的数据,可以跨页面访问,每个SessionID中只存储唯一的数据,如:首先你这样设定:session["userName"]="admin",然后你在会话还没结束的session还没过期的情况下,你又设定:session["userName"]="123";这样这个SessionID没变,然而Session池中的数据则被覆盖。此时session["userName"]的值就是“123”,而不是其它。

2.Session池中的数据不能跨进程访问。如:打开login.aspx页面写入session[“userName”]="admin";然后login页面不关闭,即此会话不结束,在这是你再在另外一个浏览器中打开一个login.aspx页面则session["userName"]=null

3.输入账号密码,点击登录页面输出  “admin --- 点击登录” ,如果紧接着点击获取session按钮,则页面只输出"admin--- 点击获取session",如果页面不关闭,打开另外一个浏览器,点击获取session按钮,则页面没法应。

三丶session的声明周期与销毁

1.session存储数据计时是滚动计时方式。具体是这样的,如果你打开写入session,从写入开始,此页面如果一直没有提交操作,则默认时间是20分钟,20分钟后session被服务器自动销毁,如过有提交操作,服务器会从提交后重新计时以此类推,直至设定时间内销毁。

2.可以设置session的销毁时间。上面代码有提到。

四丶session中保存的数据是在服务端的,而每个用户如进行登录操作,都要进行session数据写入,所以建议慎用session,就是少用。


本文转载自:http://www.cnblogs.com/knowledgesea/archive/2012/11/20/2779185.html

短短的歼击机

短短的歼击机

粉丝 82
博文 268
码字总数 269797
作品 0
武汉
高级程序员
私信 提问
AspNetCore中基于Session的身份验证

目录 AspNetCore中基于Session的身份验证 基于Session的身份验证实现 Asp.Net Core中的Session身份认证实现 总结 AspNetCore中基于Session的身份验证 在Asp.Net框架中提供了几种身份验证方式...

guodf
2018/09/16
0
0
【BS学习】ASP.NET北大青鸟视频总结

【背景】 前一段时间学习完了ASP.NET的北大青鸟视频,进行总结一下。 【内容】 第一章 Asp.net和Web窗体 第二章 ASP.NET中的对象 第三章 Web服务器控件 第四章 HTML控件和验证控件 第五章 Ap...

yym15732626210
2018/02/11
0
0
ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)

一、课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说,如何确保数据的安全将会是需要思考的问题。在ASP.NETWebService...

跟着阿笨一起玩NET
2018/09/05
81
0
[ASP.NET] Session 详解

阅读本文章之前的准备   阅读本文章前,需要读者对以下知识有所了解。否则,阅读过程中会在相应的内容上遇到不同程度的问题。   懂得ASP/ASP.NET编程   了解ASP/ASP.NET的Session模型 ...

酱哥哥
2014/03/17
325
0
asp.net Web form和asp.net MVC的一次性能比较

前次写完《别总以为asp.net mvc比asp.net web form好--web form的页面也可以体积小巧》后,收到不少评论。多数人不赞成本人提出的将viewstate放入session的做法。那么就来试验一下。搭建一个...

mikelij
2012/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部