javascript - 使用应用程序期间的会话超时
问题描述
目前我正在编写一个 Web 应用程序,但有些同事有时会提到,他们在使用 Web 应用程序期间会出现会话超时。我无法重现该错误,也不确定可能是什么错误。因为积极工作的页面加载足够,所以自上次点击以来的时间比 15 分钟的超时时间短。还有什么可能的原因?
网络配置:
<sessionState mode="InProc" timeout="3" customProvider="DefaultSessionProvider">
自动重定向 C#:
public partial class AutoRedirect : System.Web.UI.UserControl
{
public string LoginDate;
public string ExpressDate;
protected void Page_Load(object sender, EventArgs e)
{
string PageName = Path.GetFileName(Request.Url.AbsolutePath);
// Check session is expire or timeout.
if (Session["username"] == null)
{
if (PageName != Constants.defaultPage && PageName != Constants.loginPage)
{
Response.Redirect(Constants.defaultPage);
}
}
// Get user login time or last activity time.
DateTime date = DateTime.Now;
LoginDate = date.ToString("u", DateTimeFormatInfo.InvariantInfo).Replace("Z", "");
int sessionTimeout = Session.Timeout;
DateTime dateExpress = date.AddMinutes(sessionTimeout);
ExpressDate = dateExpress.ToString("u", DateTimeFormatInfo.InvariantInfo).Replace("Z", "");
}
}
自动重定向 ascx:
<script type="text/javascript">
var timeRefresh;
var timeInterval;
var currentTime;
var expressTime;
expressTime = "<%=ExpressDate %>";
currentTime = "<%=LoginDate %>";
setCookie("express", expressTime);
timeRefresh = setInterval("Refresh()", 1000);
// Refresh this page to check session is expire or timeout.
function Refresh() {
var current = getCookie("express");
var date = current.split(" ")[0];
var time = current.split(" ")[1];
var scriptDate = new Date();
var year = scriptDate.getFullYear();
var month = scriptDate.getMonth() + 1;
var day = scriptDate.getDate();
var hour = scriptDate.getHours();
var min = scriptDate.getMinutes();
var second = scriptDate.getSeconds();
if (Date.UTC(year, month, day, hour, min, second) >=
Date.UTC(date.split("-")[0], date.split("-")[1], date.split("-")[2],
time.split(":")[0], time.split(":")[1], time.split(":")[2])) {
clearInterval(timeRefresh);
Redirect();
}
}
function Redirect() {
window.location.replace("Login.aspx?s=ex");
}
// Retrieve cookie by name.
function getCookie(name) {
var arg = name + "=";
var aLen = arg.length;
var cLen = document.cookie.length;
var i = 0;
while (i < cLen) {
var j = i + aLen;
if (document.cookie.substring(i, j) == arg) {
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return;
}
function getCookieVal(offSet) {
var endStr = document.cookie.indexOf(";", offSet);
if (endStr == -1) {
endStr = document.cookie.length;
}
return unescape(document.cookie.substring(offSet, endStr));
}
// Assign values to cookie variable.
function setCookie(name, value) {
document.cookie = name + "=" + escape(value);
}
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
$(document).ready(function () {
if (getParameterByName('s') == 'ex') {
OpenDialogForSessionExpired();
}
})
</script>
解决方案
请检查 global.asax 中的 Session_Start。
你定了Session.Timeout = x
吗?
同样对于重定向,您可以使用:
Response.AppendHeader("Refresh", Convert.ToString(Session.Timeout * 60) + ";URL=Login.aspx");
在您的主页 Page_Load 方法中。
推荐阅读
- orbeon - Orbeon 表单:单击“提交”后禁用表单字段
- apache-kafka - Kafka Stream order by 基于特定字段
- powershell - Get-WindowsOptionalFeature 输出中的 RestartRequired 和 RestartNeeded 有什么区别?
- macos - 从另一部手机访问 localhost MacOS?
- python - 在 Python 的同一个类中有不同的类实例关键字(self)?
- sbt-docker-compose - docker-compose 更改主机名
- rasa-nlu - rasa_nlu 和 rasa_core 已弃用,仅安装 rasa 就可以了吗?
- docker - Openshift 4 - Mkdir 命令获取权限被拒绝错误
- assembly - Linux 内核 (x86-64) 程序集,用于将“struct pt_regs”解码为系统调用中的寄存器
- prolog - Prolog“findall/3”不返回列表