zoukankan      html  css  js  c++  java
  • session常用操作

    一、session介绍:

    1. session和cookie的区别在于,cookie是把信息保存在用户本地的浏览器中,而session是把信息保存在服务器端的内存中,

    2. 浏览器向服务器发送一个类键值对的数据,同时还会生成一个sessionID,这样才会保证数据的正确性。

    3 . session的默认有效期为20分钟

    4. session的主要作用是用来登录,登录时需要校验用户输入的用户名和密码都正确,如果正确,那么会将用户的信息存储到session中,在需要登录以后才能访问的页面中校验session,如果session有值,说明用户登录了,继续访问页面,如果没有值,说明用户没有登录,那么跳转到登录页面,让用户重新进行登录,防止用户跨过登陆直接进入主页面

    5. asp后台使用session时可以直接使用,因为该程序继承了session的接口,但是其余的需要继承session

    6. 创建和写入session:

      a. 创建session对象

        

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 
     8 namespace CZBK.ItcastProject.WebApp._2015_5_31
     9 {
    10     public partial class SessionDemo : System.Web.UI.Page
    11     {
    12         protected void Page_Load(object sender, EventArgs e)
    13         {
    14             if (IsPostBack)
    15             {
    16                 string name=Request.Form["txtName"];
    17                 //创建session
    18                 Session["userName"] = name;
    19               //  Session.Timeout = 30;
    20                 Response.Redirect("Test.aspx");
    21             }
    22 
    23         }
    24     }
    25 }

     

        //取出session的值

        

        protected bool CheckValidateCode()
            {
                bool isSucess = false;
                if (Session["validateCode"] != null)//在使用Session时一定要校验是否为空,因为如果为null的时候,执行到后面的.tostring()代码会出异常
                {
                    string txtCode = Request.Form["txtCode"];//获取用户输入的验证码。
                    //获取session值
                    string sysCode = Session["validateCode"].ToString();
                    //equals方法需要两个参数,第一个是对比的字符串,第二个如果是字母表示不计大小写
                    if (sysCode.Equals(txtCode, StringComparison.InvariantCultureIgnoreCase))
                    {
                        isSucess = true;
                        Session["validateCode"] = null;
                    }
                }
                return isSucess;
            }

    清除session:  Session["validateCode"] = null;

    为session设置有效时间: 

      Session.Timeout = 30;

      b . aspx文件使用session,直接 context.Session["名称"] = code; 如 context.Session["validateCode"] = code; 

      c . ashx文件以及一些其余的文件使用session,必须实现.IRequiresSessionState 接口,具体代码如下:

      

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 
     6 namespace CZBK.ItcastProject.WebApp._2015_5_31
     7 {
     8     /// <summary>
     9     /// ValidateImageCode 的摘要说明
    10     /// </summary>                                 //使用session创建对象,必须引入以下System.Web.SessionState.IRequiresSessionState
    11     public class ValidateImageCode : IHttpHandler,System.Web.SessionState.IRequiresSessionState
    12     {
    13         //在一般处理程序中如果要使用Session必须实现.IRequiresSessionState接口.
    14         public void ProcessRequest(HttpContext context)
    15         {
    16             context.Response.ContentType = "text/plain";
    17             Common.ValidateCode validateCode = new Common.ValidateCode();
    18             //创建一个4位数字的图形验证码
    19            string code=validateCode.CreateValidateCode(4);
    20            //创建session对象
    21            context.Session["validateCode"] = code;
    22            validateCode.CreateValidateGraphic(code,context);
    23         }
    24 
    25         public bool IsReusable
    26         {
    27             get
    28             {
    29                 return false;
    30             }
    31         }
    32     }
    33 }

     二、使用session遇到的问题。

    使用session如果项目比较大,可能会面临着创建一个集群,就是指把项目部署在不同的多个机器上,这样用户存储session时可能存储在A机器中,但是校验的时候就可能会访问的是B机器,这样,session的值就是一个null值。所以,就需要用到一个分布式缓存,就是指把所有的session值统一放置在一个服务器上,比如用到memcache,或许Redis。

    分布式缓存访问我的此博客:https://www.cnblogs.com/wangjinya/p/10706739.html

  • 相关阅读:
    [转]回车和换行
    计算机常见缩略词备忘录
    Linux多线程编程阅读链接
    字符串匹配KMP算法
    k8s测试集群部署
    搭建Vmware Harbor 镜像仓库
    GitLab搭建
    Gerrit2安装配置
    linux文件系统问题:wrong fs type, bad option, bad superblock
    Docker容器内不能联网的6种解决方案
  • 原文地址:https://www.cnblogs.com/wangjinya/p/10528619.html
Copyright © 2011-2022 走看看