zoukankan      html  css  js  c++  java
  • Session的简单使用

    1.Session的简单介绍

    Session是服务器端存储数据的一种方式,为了解决HTTP的无状态性,Session与Cookie不同的是,Cookie是存储在客户端的,而Session存储在服务器端,所以Session是一种相对比较安全的信息存储方式,同时Session的使用需要Cookie的支持,因为Session对于用户来说并不是共享的,每一个用户的Session都有系统默认的提供一个SessionID,每次用户访问站点的时候,都会将Session ID添加到响应报文头中,发送给服务器,然后由服务器根据SessionID找到具体的存储区域获取到指定的数值。此外Application也是数据存储传递的一种方式,它和Session相比最重要的一点区别就是它里面存储的数据,对于所有的访问站点的用户来说是共享的,所以,一般当需要统计站点的访问的人数的时候,可以将信心存储在Application当中。

    因为Session是存储在服务器中,可能会占用服务器大量的内存,所以Session是有一个过期时间的,默认的过期时间是20分钟,可以通过设置Session的属性TimeOut设置Session的过期时间,类似于cookie的Empires属性设置过期时间,同时可以使用Web.config文件中的节点属性timeout进行设置。

    2.Session的使用优劣

    优点:

    1.Session可以解决HTTP的无状态性,实现信息的保持和在页面中的传递,实现页面信息的共享。

    2.相对于Cookie而言,Session存在于服务器端,保证数据的安全性。

    3.Session是不共享的,独立的保存每一个用户的数据,对于用户来说是安全的。

    4.使用简单,可以很轻松的实现对各种类型数据的存储。

    缺点:

    1.由于数据是存储在服务器端,所以当用户的访问量比较大的时候,占用的内存将比较大,成为瓶颈(主要针对的是InProc模式)。

    2.对于StateServer和SqlServer模式来说,当数据的传递的时候,用到的类必须进行可序列化处理,因为这两种模式对于数据的存储和读取使用的是序列化和反序列化,但是序列化和反序列化是相对比较慢的,影响反应速度。

    3.Session的使用

    添加Session:

    Session["Name"]="小明";

    设置过期时间:

    Session.TimeOut="10";//是以分钟为单位

    除去Session:

    Session["Name"]=null;//等待GC回收

    使用方法去除Session:

    Session.Clear();

    Session.RemoveAll();

    Session.Remove(“Name”);

    4.Session的模式设置

    1.默认的模式:InProc,这是内存模式,也就是存在于当前服务器的内存中

    <System.Web>
         <sessionState mode="InProc" timeout="10">
         </sessionState>
    </System.Web>

    这种方式的优点是显而易见的,存储在服务器的内存中,跟应用程序在同一程序域,也就是在IIS中,访问速度快,但是当访问量过大的时候,这将给服务器带来压力,同时当应用程序重新启动的时候(IIS重启),session将会全部丢失。所以不适合在大访问量并且服务器容易挂掉的场合。

    2.StateSession模式,状态服务器模式

    <System.Web>
        <sessionState mode="StateServer"  stateConnectionString="tcpip="127.0.0.1:42424" timeout="30"> 
        </sessionState>
    </System.Web>


    这种模式还是比较常用的,需设置stateConnectionString中的tcpip,设置对应的状态服务器的ip地址和端口号,默认的端口号是42424,可以通过修改配置表修改端口。

    需要启动State Server服务,具体的方式使用右键点击“我的电脑”,然后选择管理-服务,找到ASP.NET State Server,将服务开启。然后就可以正常使用了

    StateServer服务器和IIS是不同的服务器,所以即使IIS重新启动,数据都不会丢失,同时StateServer可以通过设置tcpip,将其部署到某台服务器中。

    3.SqlServer模式

    需要设置mode=“SqlServer”,同时需要对Sql Server数据库进行配置,具体流程略,配置结束后,会在Sql Server数据库中生成两张表格,用来存储SessionID等信息

    这种模式实现的功能和StateServer模式近似,但是这种模式对于数据的存储是持久化的存储,可以使用其他的应用进程进行访问,这是一种最安全可靠的Session存储方式,对于数据的传输,同样需要序列化和反序列化,所以在存取性能是很慢,同时因为需要用到Sql Server数据库,所以必须保证Sql Server的正常运行。

    4.Custom模式

    这种模式是用户自定义模式,相比于Sql Server模式生成两个默认的表,你可以使用自定义模式,在已有的表中添加,或者自定义表添加。可以存储在其他类型的数据库中,还可以自己手动的创建Session Id代替系统默认的创建,通过实现系统接口ISessionIDManager接口

    5.Off模式

    禁止使用Session,这是应用程序级别的禁止,在整个应用程序中将被禁止使用Session

    同时可以使用页面级别的禁止,这种方式是比较常用的也比较的灵活。

    <%@ Page EnableSessionState="false"%>
    
  • 相关阅读:
    git学习——<二>git配置文件
    使用Python打造一款间谍程序
    Flutter gradle采坑
    逆向破解之160个CrackMe —— 031
    逆向破解之160个CrackMe —— 030
    逆向破解之160个CrackMe —— 029
    逆向破解之160个CrackMe —— 028
    逆向破解之160个CrackMe —— 027
    逆向破解之160个CrackMe —— 026
    逆向破解之160个CrackMe —— 025
  • 原文地址:https://www.cnblogs.com/XZhao/p/6340719.html
Copyright © 2011-2022 走看看