自动刷新,session失效

本文介绍了实现网页自动刷新的方法,包括使用HTML的meta标签和JavaScript定时器。此外,还探讨了ASP.NET中利用UpdatePanel和Timer控件进行局部刷新的技术,并涉及如何根据数据绑定结果更改控件状态。

     1、如果想要在页面中实现自动刷新的功能,我想到了以下几种方法:

        1) <META  HTTP-EQUIV="refresh"  CONTENT="60">  加在<head></head> 中间,60 是指秒

              页面定时跳转: <meta  http-equiv=refresh  content=60;URL=aa.asp>  使用方法同上, 60 指时间, aa.asp 指你要跳转的页面

        2) <script type="text/javascript" language="javascript">

                      setTimeout("window.location.reload(true)", 30 * 1000);

              </script>

            时间以毫秒为单位

        如果在asp.net的页面中,可以加一个定时器

       <asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true">

        </asp:ScriptManager>

        <asp:UpdatePanel ID="UpdataPanel1" runat="server">

            <ContentTemplate>

                <asp:Timer ID="Timer1" runat="server" Interval="30000" ontick="Timer1_Tick"></asp:Timer>

            </ContentTemplate>

            <Triggers>

                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="tick" />

            </Triggers>

        </asp:UpdatePanel>

 

     2、 有些时候做一些系统的后台页面需要使用框架页。一般来说都是一个登录界面,然后登录成功后跳转到控制台页面,这个页面使用了frameset 。这时候就存 在一个session 失效的问题,如果登录失效,那么就会在管理台页面的一个子页面中重新显示登录界面了,这个是我不想看到的。

解决方法是:可以在登录页面中加入以下js 代码。

 

 if (top.location != self.location){ 

       top.location=self.location; 
}

 

      3、 如果需要改变绑定后的数据的控件的状态,如果在数据库绑定后,如果 没有维度和经度的情况下 , 让查看 LinkButton 不可用,可以用以后代码实现:

grdrecord.DataSource = dt2;

grdrecord.DataBind();

// 如果查询出的经度和纬度为空时, 则让查看按钮不可用

for (int ni = 0; ni < grdrecord.Rows.Count; ni++)

{

Label lblat=(Label )this .grdrecord.Rows[ni].Cells[2].FindControl("lbllat" );

    Label lblng=(Label )this .grdrecord.Rows[ni].Cells[3].FindControl("lbllng" );

    if (("" .Equals(lblat.Text)) && ("" .Equals(lblng.Text)))

    {

((LinkButton )this .grdrecord.Rows[ni].Cells[4].FindControl("lbquery" )).Enabled = false ;

    }

}

    4、 如何动态地给一个对象添加属性?

     首先一个 var obj = {};

     然后想在程序中动态的给obj添加一个属性,比如sex属性,值为male,属性名称和值都是不确定的,最后要达到的效果就是,如果添加了sex属性,那么alert(obj.sex);就应该显示male。

     //下面是给一个静态的添加属性

     <script>

          var obj = {};

          obj.sex = "male";

          alert(obj.sex);

     </script>

     //下面是给一个对象动态的添加属性

     <script>

          var obj = {};

          name  = "sex";

          value = "male";

          obj[name] = value;

          alert(obj.sex);

     </script>

    5、 在asp.net中用 js 得到 asp控件 CheckBox Text 的值,比如:

            < asp : CheckBox ID ="CheckBox1" runat ="server" Text =" 哇哈哈" />

          要想得到Text 的值 " 哇哈哈 , jQuery可以 这样写

                var str = $('#CheckBox1+label' ).html();

          就可以得到 哇哈哈

     6、在后台代码中调用正则的例子:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            Regex r = new Regex("^[0-9]*$");

            if (r.IsMatch(textBox1.Text))

            {

                MessageBox.Show(" 数字 ");

            }

            else

            {

                MessageBox.Show(" 字母 ");

            }

        }

<think> 我们正在讨论session失效的情况。根据引用内容,我们已经知道设置session失效时间的三种方式,但用户现在想知道session失效的情况有哪些。结合引用和常见知识,我们可以总结如下: session失效的情况主要包括: 1. 超时失效:当用户与服务器无交互时间超过设定的失效时间(通过容器配置、web.xml配置或Java代码配置)时,session失效。 2. 程序调用失效:通过调用session.invalidate()方法主动使session失效。 3. 服务器重启或崩溃:服务器重启或崩溃会导致内存中的session数据丢失(除非使用session持久化机制)。 4. 浏览器关闭:虽然浏览器关闭不会立即导致服务器端的session失效,但会导致客户端sessionid丢失,从而无法再关联到原来的session(除非使用cookie持久化sessionid,且浏览器支持恢复会话)。 下面详细说明: ### 1. 超时失效(最常见) - 在设定的时间内,如果用户没有与服务器进行任何交互(即没有请求发送到服务器),session将自动失效。 - 设置方式: - **容器级别**:如Tomcat的`conf/web.xml`中配置`<session-timeout>`(单位:分钟),对整个容器生效[^3]。 - **项目级别**:在项目的`web.xml`中配置`<session-timeout>`(单位:分钟)[^1]。 - **代码级别**:通过`session.setMaxInactiveInterval(int seconds)`设置(单位:秒)[^1][^2]。 - 优先级:代码设置 > 项目web.xml设置 > 容器web.xml设置[^1]。 - 注意:任何用户活动(如刷新页面)都会重置超时倒计时[^2]。 ### 2. 程序主动调用失效 - 开发人员可以在代码中调用`HttpSession.invalidate()`方法,立即销毁当前session。 - 典型场景:用户点击“退出登录”时。 ### 3. 服务器重启或崩溃 - 若未配置session持久化(如将session保存到数据库或文件),服务器进程终止会导致内存中的session数据全部丢失。 - 解决方案:配置session持久化(如Tomcat的session持久化配置)。 ### 4. 浏览器关闭导致session间接失效 - 浏览器关闭时,存储在浏览器内存中的sessionid(通常为JSESSIONID的cookie)会被清除。 - 重新打开浏览器后,若没有有效的sessionid,服务器会创建新的session,原session因无法访问而成为“孤儿”,最终在超时后被清除。 - 例外:若浏览器支持会话恢复(如恢复标签页)且未清除cookie,则sessionid可能保留,session继续有效。 ### 其他情况 - **Session持久化失败**:当使用分布式session时,若持久化存储(如Redis)故障或数据过期,可能导致session失效。 - **Session被踢出**:某些系统支持多点登录管理,如用户A在设备1登录后,在设备2登录并选择“踢出设备1”,则设备1的session会被强制失效。 ### 总结 | 失效情况 | 触发条件 | |----------------------|--------------------------------------------------------------------------| | 超时失效 | 用户无操作时间 > 设定超时时间 | | 程序调用失效 | 调用`session.invalidate()` | | 服务器重启/崩溃 | 未持久化的session随服务器进程终止而丢失 | | 浏览器关闭 | 客户端sessionid丢失,无法关联原session | | Session持久化失败 | 分布式session存储故障或数据过期 | | 被踢出 | 管理员或用户主动终止其他设备的session | 在开发中,需根据业务场景选择合适的session管理策略,避免意外失效导致用户体验问题。 §§相关问题§§ 1. 如何防止浏览器关闭导致session失效? 2. 分布式系统中如何管理session? 3. 如何实现session的持久化存储? </think> ### Session失效的常见情况分析 Session失效通常由以下场景触发,结合引用内容和实际开发经验总结如下: #### 1. **超时失效(最常见情况)** - **触发机制**:用户无操作时间超过设定阈值 - **配置方式**: - **容器级配置**:在Tomcat的`conf/web.xml`中设置`<session-timeout>`(单位:分钟,默认30分钟)[^1][^3] - **项目级配置**:在应用`web.xml`中设置`<session-timeout>`(优先级高于容器配置)[^1] ```xml <session-config> <session-timeout>20</session-timeout> <!-- 20分钟后失效 --> </session-config> ``` - **代码级控制**:通过`session.setMaxInactiveInterval(seconds)`动态设置(单位:秒)[^1][^2] ```java request.getSession().setMaxInactiveInterval(600); // 10分钟无操作后失效 ``` - **特殊值**:设置为0或负数表示永不过期(生产环境慎用) #### 2. **主动销毁** - **程序调用**: ```java request.getSession().invalidate(); // 立即销毁当前session ``` - **典型场景**:用户点击"退出登录"、管理员强制下线、安全敏感操作后 #### 3. **应用/服务器重启** - **内存Session丢失**:服务器重启导致未持久化的session数据清空 - **解决方案**:使用Redis等持久化存储保存session数据 #### 4. **浏览器行为导致** - **会话结束**:浏览器关闭(取决于浏览器实现,多数会保留session) - **Cookie清除**:手动清除JSESSIONID或浏览器隐私模式导致session关联丢失 - **多标签冲突**:不同浏览器标签可能共享session(同源策略) #### 5. **容量限制触发** - **内存溢出保护**:当服务器session存储达到上限时,按LRU(最近最少使用)策略淘汰 - **配置示例**(Tomcat): ```xml <Context> <Manager className="org.apache.catalina.session.PersistentManager" maxActiveSessions="1000"/> </Context> ``` #### 6. **协议切换失效** - **HTTP到HTTPS切换**:不同协议下的session可能不共享(取决于服务器配置) > ⚠️ **关键特性**:超时重置机制 > 任何与服务器的交互(如刷新页面、AJAX请求)都会重置超时计时器[^2],只有**连续无操作时间**达到阈值才会触发失效。 #### 优先级顺序总结 当多种配置共存时,优先级为: `代码设置 > 项目web.xml > 容器web.xml` [^1] --- ### 检测Session失效的方法 ```java // 在Servlet中检测 HttpSession session = request.getSession(false); if (session == null || session.getAttribute("user") == null) { // Session失效 response.sendRedirect("login.jsp"); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值