zoukankan      html  css  js  c++  java
  • 在ASP.NET中对Session的一些了解

    Session的工作原理:

    (1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
    (2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量
    (3)当执行PHP脚本时,通过使用session_register()函数注册session变量
    (4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
     
    何为session???
    在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。存储在Session池中的数据是全局型的数据,可以跨页面访问,每个SessionID中只存储唯一的数据。Session池中的数据不能跨进程访问。

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

    我们知道Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的。session中保存的数据是在服务端的,而每个用户如进行登录操作,都要进行session数据写入,所以建议慎用session,就是少用。

    下面是我写的一个例子,Session大致的意思如例子中的介绍:

    这是一个前台页面,登陆界面(如下图),有用户名、密码以及登陆按钮。用户登陆需要将用户名传到主界面上,显示是该用户登陆,我用的Session。

       

    上面是登陆界面,用户名是test,下图是主界面,图中的"test"正是用户名,从登陆界面传过来的值。

    登陆界面后台代码(不全面,有删减!!):

            /// <summary>
            /// 登陆到主界面
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnSign_In_Click(object sender, EventArgs e)
            {
                string user = this.txtUsername.Text.Trim();
                string pwd = this.txtPassword.Text.Trim();
    
                if (user == "" || pwd == "")
                {
                    Response.Write("<script>alert('用户名和密码不能为空,请输入用户名或密码!');</script>");
                }
                else
                {
                    int state = 0;//操作数据库结果
                    string sql = "";//SQL语句
    
                    try
                    {
                        //打开数据库
                        helper.Connect();
                        
                        //查询用户信息记录
                        sql = "select Username,Password from UsersInfo where Username='" + user + "'and Password='" + pwd + "'";
                        // 执行查询命令
                        state = helper.DataTable_UsersInfo(sql);
    
                        if (state > 0)
                        {
                            Session["Username"] = this.txtUsername.Text;//传值(用户名)
                            Server.Transfer("Index.aspx");
                        }
                        else
                        {
                            Response.Write("<script>alert('对不起,用户名或密码不正确,请您重新输入!');</script>");
                            this.txtUsername.Text = "";
                            return;
                        }
                    }
                    catch (Exception E)
                    {
                        E.Message.ToString();
                    }
                    finally
                    {
                        //关闭数据库
                        helper.Close_Up();
                    }
                }
            }
    登陆按钮中的Session传值

    用户通过登陆界面登陆之后,在主界面上会显示是该用户的登陆,所以应该在主界面Page_Load()里面加载从登陆界面传过来的值。代码如下:

           protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["Username"].ToString() != null)
                {
                    this.lblUsername.Text = Session["Username"].ToString();
                    Session.Timeout = 60;
                    //Session.Remove("Username");
                }
            }

    总之,所说的不是很专业,就是自己练习的例子。非要说个所以然,什么具体的功能啊,存在哪些方面的问题啊、缺陷啊,也不会详尽。如果您需要这方面的知识,就尽量多在网上找找吧。。。

     
  • 相关阅读:
    使用Redis的理由
    从输入网址到显示网页的全过程分析
    Node.js初识
    GET和POST的数据传递到底有何区别?
    第四五六周学习进度
    首尾相接整数数组中最大子数组的和
    网页版四则运算
    团队介绍及项目简介
    整数数组中最大子数组的和
    软件工程个人作业03
  • 原文地址:https://www.cnblogs.com/litao4047/p/3134241.html
Copyright © 2011-2022 走看看