`
wkf41068
  • 浏览: 458371 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

表单提交 Session过期

阅读更多
  在表单提交时,经常会发生session 失效的问题。此时就需要强制用户重新登录。对此场景的通用性,抽取一个组件是十分必要的。
  该组件主要完成如下工作:
1. 在点击提交的时候,调用后台代码<用于获取session,判断其中有关用户的属性是否存在,如果不存在就说名session失效,原先存在于session中的内容已被系统清空如果存在的话,就让用户提交表单>

   考虑到组件的通用性,在通过代码获取session时候,采用一个JSP。
(1) JSP 的代码如下所示:
<%@ page import="com.huawei.it.support.usermanage.helper.UserInfoBean"%>
<%@ page import="com.huawei.it.sso.filter.util.SsoConstants"%>
<%
System.out.println(request.getSession(false));
UserInfoBean uiBean = (UserInfoBean) session.getAttribute(SsoConstants.SESSION_USER_INFO_KEY);
if (uiBean == null|| "anony_hw_support".equals(uiBean.getUid())) {
	out.write("false");
}else{	
	out.write("true");
}
%>


(2) 点击表单提交时激发的JS中通过AJAX的方式访问给JSP.代码如下所示:
/**
 * 检查Session是否失效,没有失效就执行毁掉函数表单提交, 如果失效就实行异步登录
 * 
 * @param fun
 *            回调函数
 */
function toCheckSession(btn, validate, commitFun) {
$.ajaxSetup({
	cache : false
});
if (!(undefined === validate) && !eval(validate)) {
	return;
}	
$.ajax({
url : "/Support_E_CBB_DEMO/cbb/pages/sessionCheckReBuild/jsp/validator_session.jsp",
dataType : "text",
async : false,
success : function(isUserLogined) {		   
if ("true" == eval(isUserLogined).toString()) {			if (!(undefined === commitFun)) {
		eval(commitFun);
	} else {
		$(btn).parents("form").submit();
	}
} else {
	showLoginWin();//showLoginWinTwo() 
	}
}
});
}


//弹出登录框
function showLoginWinTwo() {
	alert("Connection time is out, please log in again!");
	window.open("http://uniportal-beta.huawei.com/uniportal/?redirect=http://www.huawei.com:8080/Support_E_CBB_DEMO/cbb/pages/sessionCheckReBuild/jsp/success.jsp?","_blank");
}
// 弹出登录框
function showLoginWin() {
/*	var locationurl = parent.document.location;
	alert(locationurl);*/
	var html = " <div id='loginWin'  style='display:none;width:350px;height:80px;'>"
			+ "Session 失效,请重新登录!"
			+ "<a href=\"http://uniportal-beta.huawei.com/uniportal/?redirect=http://www.huawei.com:8080/Support_E_CBB_DEMO/cbb/pages/sessionCheckReBuild/jsp/success.jsp?\" target=\"_blank\" onclick=\"closeDiv();\">点击这里重新登录</a>"
			+ "<br><input type=\"button\" value=\">>关闭<<\" onclick=\"closeDiv()\"/>"
			+ "</div>";
	$("body").append(html);
	$("#loginWin").OpenDiv();
}
function closeDiv() {
	$("#loginWin").CloseDiv();
}



分享到:
评论

相关推荐

    用django设置session过期时间的方法解析

    这是因为默认情况下,Django只在用户提交表单或者有其他数据更改时才保存Session数据。如果你希望每次请求都保存Session(这样可以更新Session过期时间),你需要在`settings.py`中设置`SESSION_SAVE_EVERY_REQUEST ...

    PHP提交表单失败后如何保留填写的信息

    使用 session_cache_limiter 方法可能会出现的问题是,如果用户修改了已经提交的信息,表单页面所呈现的信息还是缓存里的信息,没能及时自动刷新。解决方案是,在 session_start 前面加上: `session_cache_limiter...

    thinkphp3.2 防止表单重复提交

    当表单提交时,服务器会验证这个令牌是否有效,以此来检测表单是否被重复提交。如果令牌无效或者已使用过,服务器就会拒绝处理请求。 在控制器中,`form_token(U('.../index'));` 这行代码是在生成表单令牌时指定的...

    JavaEE Struts2利用tokenSession防止重复提交

    当用户提交表单时,服务器会检查session中的token与表单提交的token是否匹配,如果匹配并且是首次提交,那么执行业务逻辑,否则视为重复提交并拒绝处理。 具体实现步骤如下: 1. **配置拦截器**:在struts.xml配置...

    struts+token机制解决表单重复提交

    然而,Web应用在处理表单提交时可能会遇到一个问题,即用户在短时间内连续点击提交按钮,导致服务器接收到重复的请求,这被称为表单重复提交。为了解决这个问题,开发者通常会采用Token机制。 Token机制的核心思想...

    struts token机制解决表单重复提交

    当用户首次提交表单时,服务器会生成一个随机的、唯一标识的Token,并将其存储到用户的会话(Session)中,同时将该Token放入到表单隐藏字段中。当用户提交表单时,服务器会检查提交过来的Token是否与Session中的...

    Token验证表单重复提交

    在表单提交时,服务器会生成一个唯一的Token并将其存储到用户的会话(session)中,同时将Token返回给客户端,一般放在隐藏字段中。当表单提交时,客户端会将这个Token一起发送回服务器。服务器接收到请求后,会检查...

    Java Web应用开发 26 课堂案例-使用session记录表单信息.docx

    9. **session过期与销毁**:虽然这个案例没有涉及,但通常session会有一定的生命周期。如果用户长时间不活动,session会自动过期,服务器会清除其中的属性。开发者可以设置session的最大空闲时间,或者在适当的时候...

    内置对象application,session,cokie,viewstate的区别与session详解

    传统的ASP.NET页面中,`ViewState`默认开启,允许用户在表单提交后仍能看到之前的输入。在新的ASP.NET方式下,`ViewState`会自动处理表单值的保留,使得用户在提交表单后无需重新输入数据。 ```html &lt;!-- 传统ASP...

    jsp课后习题第4章.docx

    在处理包含汉字的表单提交信息时,为了正确获取汉字,需要在JSP页面中设置字符编码。例如,使用`request.setCharacterEncoding("gb2312")`来设定请求的编码为GB2312,确保汉字能被正确解析。 禁用缓存功能是防止...

    session失效

    这样一旦用户超过30分钟未进行任何操作(比如点击页面、提交表单等),其Session就会自动失效,从而强制用户重新登录验证身份。这种方式既保证了安全性又避免了频繁要求用户登录带来的不便。 #### Session失效的...

    jsp和servlet之中的session详细介绍

    另一种方式是在HTML表单中添加一个隐藏字段,该字段包含session ID,当用户提交表单时,ID会被一起发送到服务器。 补充:Session 的删除 当用户关闭浏览器或session超时时,session通常会被销毁。此外,开发者也...

    session存用户名密码实现用户登录和退出

    另外,定期更新Session ID,设置合理的Session过期时间也是防止Session劫持的有效手段。 6. **管理大量Session**:在高并发的大型应用中,单纯依赖内存来存储所有Session可能造成资源浪费。这时,可以考虑使用...

    session与cookie的区别和联系?

    - 例如,可以在URL中加入Session ID参数,或者通过隐藏表单字段等方式来传递Session ID。 3. **共同目标**:虽然Session和Cookie有不同的特性和应用场景,但它们的共同目标都是为了保持用户的会话状态,提高用户...

    实现session身份认证机制

    6. **处理session过期**:默认情况下,session会在浏览器关闭时失效。若需更长的会话时间,可设置`cookie.maxAge`来指定session的有效期。 ```javascript app.use(session({ ..., cookie: { maxAge: 3600000 },...

    asp.net下session的使用

    3. **防止Session过期**: - 默认情况下,ASP.NET的Session会在20分钟内无活动后自动失效。如果需要更长时间,可以在Web.config文件中配置`&lt;sessionState timeout="minutes"&gt;`,其中"minutes"是所需的分钟数。 4. ...

    《PHP编程最快明白》第四讲:日期、表单接收、session、cookie_.docx

    - 当用户提交表单后,数据可以通过 `$_GET` 或 `$_POST` 超全局数组来接收。在 URL 中传递的数据会被自动进行 URL 编码,`urlencode()` 和 `urldecode()` 分别用于编码和解码 URL 变量。 - `$_GET['page']` 用于...

    Asp.net刷新重复提交

    2. **提交验证**:在服务器接收到表单提交时,检查Session中的状态是否与提交的表单数据对应。如果匹配,说明这是第一次提交,可以正常处理;如果不匹配或者Session中没有找到对应的状态,那么可能是重复提交,此时...

    Session Timeout需求解決

    例如,当用户滚动页面、点击按钮或者提交表单时,服务器可以通过更新Session最后访问时间来延长其有效期。 再次,安全层面的考虑。过短的Timeout可能导致用户频繁登录,而过长的Timeout则增加了账户被他人恶意使用...

    asp.net 防止用户通过后退按钮重复提交表单

    这有助于在处理表单提交后立即清除缓冲,防止用户通过后退按钮看到已提交的数据。 - `Response.Expires=0` 和 `ExpiresAbsolute=Now()-1`:这两个属性用来设置页面的过期时间,设置为0表示立即过期,而设置为负值或...

Global site tag (gtag.js) - Google Analytics