热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

asp.netsession延迟session有效期

如果访问者在Session的设定的失效时间内(比如默认的20分钟)没有任何动作,Session就会失效,这个就意味着与Ses

如果访问者在Session的设定的失效时间内(比如默认的20分钟)没有任何动 作,Session就会失效,这个就意味着与Session存贮相关的变量也会同时失效,不能再访问。有时候我们需要保持Session很长的时间来等待 用户完成工作,比如博客,当用户在写完文章之后提交却发现Session已经失效,这是一件多么悲惨的事情。

 

很多人可能尝试这样做

<system.web>
      <authenticationmode&#61;"Forms">
        <forms timeout&#61;"60"/>
      authentication>

    ...
    system.web>

尽管我们可以很简单的增加Session的过期时间&#xff0c;但是这并不是一个很好的方案。当用户 真的离开的时候&#xff0c;它会让你的服务器系统浪费很多内存资源来保存一些完全没有意义的东西。如果这个网站的访问量非常大的时候&#xff0c;可能由于Session占用的 内存太多&#xff0c;而使你的网站运行得很慢。解决方案我们可以采用客户端周期性请求服务器的方法来保持Session。很多大型网站都是采用这样的方法&#xff0c;例如网 易&#xff0c;51博客和QQ在写邮件和发文章的时候。为了达到这样的效果&#xff0c;我们可以使用Javascript,jquery,metarefresh和 asp.net ajax几种方法来解决。

1.    用Javascript来保持Session

Asp.net 仅仅会记住用户的最后一次请求&#xff0c;它不知道用户是否关闭了浏览器&#xff0c;或者是否在干别的事情。为了保住那些还开着我们的网页的用户的Session&#xff0c;我们可以使用JS的setInterval功能

 

<%--
In
this example, image will be used to keep session alive,
By changing image
&#39;s src parameter, we&#39;ll make periodical requests
to web server.
--%>
<img id&#61;"imgSessionAlive" width&#61;"1" height&#61;"1"/>


<script type&#61;"text/Javascript">
// Helper variable used to prevent caching on some browsers
var counter;
counter
&#61;0;

function KeepSessionAlive() {
// Increase counter value, so we&#39;ll always get unique URL
counter&#43;&#43;;

// Gets reference of image
var img &#61; document.getElementById("imgSessionAlive");

// Set new src value, which will cause request to server, so
// session will stay alive
img.src &#61;"http://YourWebSiteUrl.com/RefreshSessionState.aspx?c&#61;"&#43; counter;

// Schedule new call of KeepSessionAlive function after 60 seconds
setTimeout(KeepSessionAlive, 60000);
}

// Run function for a first time
KeepSessionAlive();
</script>

 

 

在这个例子里&#xff0c;RefreshSessionState.aspx这个页面将会每分钟被请 求一次。我们通过操作SRC来请求服务器。当然这只是一个巧妙的方法&#xff0c;你可以使用Http Request.当然那更加的麻烦。如果你只是想保住Session的话你可以设置为19分钟&#xff08;19*60*1000&#61;1140000&#xff09;。当访问的间隔很 小时&#xff0c;比如例子的一分钟&#xff0c;这样做的好处是你可以准确的知道用户的离开时间&#xff0c;并且立即释放掉不需要使用的资源。你甚至可以把Session的过期时间定为2 分钟。这样你的服务器就只会保存当前停留在你网站的用户的Session.

因为RefreshSessionState.aspx页面会被每分钟请求&#xff0c;所以我们可以使用ASP.NET服务器技术来追踪我们的用户&#xff0c;例如统计当前用户数&#xff0c;用户在看那一个页面等等详细信息&#xff0c;如果是做一个社区性质的网站的话&#xff0c;相信这些会让你的网站绽放光彩的。

2.      使用JQUERY 保持Session

我们可以使用Jquery框架来完成相同的任务。这里我们使用Post提交方式来保持我们的Session

 

<script language&#61;"Javascript" type&#61;"text/Javascript" src&#61;"http://code.jquery.com/jquery-latest.js"></script>
<script language&#61;"Javascript" type&#61;"text/Javascript">

function KeepSessionAlive() {
// 1. Make request to server
$.post("http://YourWebSiteUrl.com/RefreshSessionState.aspx");

// 2. Schedule new request after 60000 miliseconds (1 minute)
setInterval(KeepSessionAlive, 60000);
}

// Initial call of function
KeepSessionAlive(); Â
</script>

 

 

Jquery的简洁性是不是让你眼红呢&#xff1f;

3.      使用Meta Refresh来保持Session

一般我们不会用refresh来定时刷新我们的整个页面&#xff0c;因为这会造成你的页面一闪一闪&#xff0c;这可不是一闪一闪亮晶晶&#xff0c;你要是一闪一闪的用户早跑了。所以我们一般使用一个Iframe来完成这个功能

             <iframe height&#61;"0" width&#61;"0" src&#61;"RefreshSessionState.aspx" frameborder&#61;"0" />

            此时RefreshSessionState.aspx如果你不要跟踪用户的话不需要服务器代码。我习惯于这样写

 

<%&#64; Page Language&#61;"C#"%>
<html>
<head>
<%
Response.Write(
&#64;""&#43;
Server.UrlEncode(DateTime.Now.ToString())
&#43;&#64;""" />");
%>
head>
<body>

body>
html>

参数x的作用是为了避免浏览器缓存整个页面导致我们需要的功能成为泡影&#xff0c;这样我们就通过了一个iframe来完成了我们需要的功能。

4.   使用asp.net ajax 来保持Session

Aspx页面的代码如下&#xff1a;

              代码
<%&#64; Page Language&#61;"C#" AutoEventWireup&#61;"true" CodeFile&#61;"Ajax-Refresh.aspx.cs" Inherits&#61;"Ajax_Refresh"%>

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns&#61;"http://www.w3.org/1999/xhtml">
<head runat&#61;"server">
<title>title>
head>
<body>
<form id&#61;"form1" runat&#61;"server">
<asp:ScriptManager ID&#61;"ScriptManager1" runat&#61;"server">
asp:ScriptManager>
<div>

<asp:UpdatePanel ID&#61;"UpdatePanel1" runat&#61;"server">
<ContentTemplate>
<asp:Timer ID&#61;"Timer1" runat&#61;"server" Interval&#61;"10000" ontick&#61;"Timer1_Tick">
asp:Timer>
<asp:Label ID&#61;"Label1" runat&#61;"server" Text&#61;"Label">asp:Label>
ContentTemplate>
asp:UpdatePanel>

div>
form>
body>
html>

 

Timer控件的Interval可是设置间隔时间但是是毫秒。服务器端的代码我们可以这样写&#xff1a;

[ C# ]

using System;

publicpartialclass Ajax_Refresh : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
// Set session timeout to small value, in this case
// 2 minutes, to see quickly if Timer will keep session alive
Session.Timeout &#61;2;
// Set some value in session
Session["Testing"] &#61;"session is alive";
}

// Timer will make request to server in regular time intervals
protectedvoid Timer1_Tick(object sender, EventArgs e)
{
// Write current session value into label
Label1.Text &#61; (string)Session["Testing"];
Label1.Text
&#43;&#61;"
Last request at
"&#43; DateTime.Now.ToString();
}
}

[ VB.NET ]

Partial Class Ajax_Refresh
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
&#39; Set session timeout to small value, in this case
&#39; 2 minutes, to see quickly if Timer will keep session alive
Session.Timeout &#61;2
&#39; Set some value in session
Session("Testing") &#61;"session is alive"
End Sub

&#39; Timer will make request to server in regular time intervals
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
&#39; Write current session value into label
Label1.Text &#61; Session("Testing")
Label1.Text
&&#61;"
Last postback at
"& DateTime.Now.ToString()
End Sub
End Class

转:https://www.cnblogs.com/rongnianwu/archive/2013/05/16/3081531.html



推荐阅读
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
author-avatar
尛妙苗_549
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有