• Cookie与Session的一些总结


    一、Cookie:


    Cookie主要存储一些不敏感的数据,只能存储字符串类型

    执行过程:
    (1)第一次请求:
    客户端将数据(比如用户名)以请求报文的形式请求服务器端响应,
    服务器端得到数据(用户名),
    如果登录成功则用Cookie保存在客户端上,Cookie创建并赋值如下:

    HttpCookie cookie = new HttpCookie("""");
    Response.Cookies.Add(cookie);


    也可以通过浏览器发过来的请求报文来获得Cookie对象:

    HttpCookie Cookie = context.Request.Cookies[Kits.ID];


    (2)第二次请求:
    这样就可以满足需求,当用户再次请求页面时,就可以对用户Cookie的判断,
    来预先填充一些数据。

    Cookie的取值代码如下:

    Request.Cookies[""].Value.ToString();


    Cookie 可以设置过期的时间(设置Cookie为硬盘Cookie):

    cookie.Expires = DateTime.Now.AddHours(1);


    判断Cookie是否存在(判断获得的Cookie对象是否为空)

    if(Request.Cookie[""]==null){ }



    二、Session:


    要实现Session功能,必须实现System.Web.SessionState.IRequiresSessionState 标记接口

    Session的存在也是为了免去用户重复性的去输入一些数据,
    不同的是Session可以存储一些数据敏感的数据(Pwd,密码),可以是任意类型的,
    这样就可以实现免登陆(用户登录一次之后,如果不退出浏览器,第二次可直接进入主页),

    执行过程:
    (1)第一次请求
    浏览器将数据通过请求报文的形式,请求服务器端响应,
    服务器判断用户名密码是否正确,

    正确之后,用Session保存数据,代码如下:
    存值,Session是以键值对形式存储的:

    context.Session[""]="";


    这一步是服务器端自动完成的,服务器会把Session存到Session池中,
    Session池中对象的键(ASP.NET_SessionId)是随机生成的,
    Session池中的值就是刚才存储的Session键值对,context.Session["Pwd"],


    将ASP.NET_SessionId以Cookie形式返回,返回的Cookie是以缓存保存在浏览器端,

    (2)第二次请求
    在第一次请求后,浏览器已经获得了一个ASP.NET_SessionId,
    在第二次请求时,会将ASP.NET_SessionId带到请求报文头中,
    这样在执行aspx页面的管道事件的第9到第11个事件时,根据ASP.NET_SessionId
    找到Session池中对应的Session对象,并将这个对象赋值给上下文对象context中。

    Session的取值代码如下:

    Context.Session[""].ToString();

    将Session清除的代码如下:

    Context.Session.Abandon();

    判断Session是否存在Session(判断获得的Session对象是否为空)

    if(Context.Session[""]==null){ }



    三、可以使用Cookie与Session的组合来一些功能


    (1)需求:用户登录一次页面成功之后,以后再登录其他页面时可以不用通过登录页面,
    前提是只要不退出浏览器,一旦退出浏览器,用户需重新通过登录页面

    这是通过Session来实现

    登录成功后将查找到的用户名存到Session中:

    context.Session[""]="";


    以后每个页面首先判断Session是否存在:

    if(Context.Session[""]==null){ }




    (2)需求:实现用户的7天免登录,

    这是通过Session 与Cookie组合完成的

    登录成功后将查找到的用户名存到Session中:

    context.Session[""]="";



    如果用户选择了免登录,因为Cookie不能存储用户敏感数据,
    用Cookie记录当前用户的ID,并设置过期时间为7天,

    HttpCookie cookie = new HttpCookie("""");
    cookie.Expires = DateTime.Now.AddDays(7);
    Response.Cookies.Add(cookie);


    以后在判断完Session是否存在后,再判断用户 ID的Cookie是否存在,
    如果Cookie存在,则取出ID,并在数据库中查找用户名赋值给Session,

    stringID= Request.Cookies[""].Value.ToString();
    然后查询出用户名,
    context.Session[""] = "用户名";




    (3)需求:登录成功之后,在每个页面上显示用户名

    通过Session实现
    在aspx前台页面上如下代码:

    <%= Session[""] %>
  • 相关阅读:
    CentOS7----Linux Root忘记,进入救援模式更改密码(两种方法!)
    Linux/CentOS7install PackageError: Loaded plugins: fastestmirror
    LinuxCentOSamba7关闭SELinux重新启动失败出现:Failed to load SElinux policu freezing
    Github Page + Hexo 搭建个人博客
    Selenium的使用
    Linux下使用Selenium进行自动化测试
    Python学习-网络编程
    Python学习-多线程和多进程
    Python学习-从面向对象开始
    Linux安装Jupyter并且远程访问
  • 原文地址:https://www.cnblogs.com/Raymond201508/p/4775920.html
Copyright © 2020-2023  润新知