• asp.net 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>

    .net代码

    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();
                }
            }

    那么我们要怎么判断session是否过期了呢

    方法二:可以在HttpModule中判断,在HttpModule中注册请求管道的AcquireRequestState

    事件(可以拿到session的那个事件)

    步奏:

    1:新建一个继承IHttpModule接口的类Module

    2:让Module类实现接口成员。

    3:在Init()方法中对Context进行注册AcquireRequestState事件(在这个事件中可以拿到Session)

    4:在方法中写

    void context_AcquireRequestState(object sender, EventArgs e)

        {

            HttpApplication app = (HttpApplication)sender;

            if (app.Context.Session["userId"] == null)

            {

                app.Response.Write("<script>alert('没有登录');</script>");

            }

    }

    5:在web.config配置文件中<system.web>节点下添加一个节点

    <httpModules>

          <add name="demo" type="Module"/> <!--type后面是命名空间.类名-->

        </httpModules>

    使用这种方法会在每个页面加载的时候都先检查module。

    原理是实现IHttpModule接口的类是在执行页面之前执行的。 在page_load()事件执行之前就判 断Session如果不存在就提示。

    这种方法效率能高一些,因为如果不存在 session直接就可以处理。后面的一系列事件都可以不 用执行。


    方法三:在page类上做点手脚

    Page类中有OnInit()这个虚方法。

    步奏:

    1:创建一个集成Page类的类TestSession

    2:在TestSession中重写OnInit()这个方法。

    3:在OnInit()方法中判断Session

    4:在需要判断session的页面集成TestSession这个类,而不是继承Page类

    这种方法比较灵活,在需要判断session的页面中继承TestSession就可以,不需要判断session 的页面直接继承Page就行了

  • 相关阅读:
    spring无法接收上传文件
    springcloud feign增加熔断器Hystrix
    mybatis调用存储过程(@Select方式)
    spring在注解标注的方法上加切面
    java注解Annotation
    java包装类
    JZ-C-43
    JZ-C-42-Plus
    JZ-C-42
    JZ-C-41-Plus
  • 原文地址:https://www.cnblogs.com/sjqq/p/6366021.html
Copyright © 2020-2023  润新知