在表单提交时,经常会发生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();
}
分享到:
相关推荐
PHP中如何保持SESSION以及由此引发的一些思考 最近的一个项目,里面有一个比较大的表单,用户完成它需要很多时间,很多用户花了千辛万苦完成之后,一提交发现SESSION过期,系统退出了,所以引起了研究如何设置...
之前看过别人防刷新的方法,是让页面刷新或...在提交表单时,判断表单中提交上来的Hidden和Session中的标志是否一致,就可以知道是正常的提交表单,还是刷新页面导致的重复提交。需要注意的是,在每次提交表单的处理
jsp防止重复提交 这做最好结合让jsp页面过期一起用。当用户返回到上一表单页面时(按backspase键、返回按钮,右击--返回),让表单页面过期。这样才可以让用户主动的刷新jsp而从新生成一个session.setAttribute(...
在某帝国面试的时候问题了这个题: 怎么处理post提交重复的问题, 后来跟@暖阳交流,他说记录时间,我没有明白,我想的是用session在表单页面记录下,然后提交页面判断,如果相等则视为成功,并清空session,但有个问题是如果...
在前面我们学习了Cookie和Session两种会话技术,这个也是比较主流的两种会话...除了登录页面,还有一个登录成功的显示页面,这个页面可以根据Session的状态来判断用户是否登录和登录是否已经过期(如用户半小时无任
1132 在登录页面长时间断开网络连接session过期导致登录失败;1134 动态是搜索表单需要保证默认的检索条件为空;1135 点击项目跳转的地址不对;1137 session目录检查功能不要关闭;1138 禅道一键安装包安装然之异常...
实例172 不提交表单获取单选按钮的值 207 实例173 实现复选框中的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175 图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 上传图片预览 ...
实例172 不提交表单获取单选按钮的值 207 实例173 实现复选框中的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175 图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 上传图片预览 ...
17.3 Session应用实例——登录验证 286 17.3.1 数据库设计 286 17.3.2 HTML表单的设计 287 17.3.3 验证页面的编写 287 17.3.4 欢迎页面的编写 288 17.3.5 注销页面的编写 288 17.3.6 代码的运行 289 17.3.7 代码的...
以前说到BUTTON控件CausesValidation=true/false来设置按钮提交的表单是不是被检验也就是这里的几个检验控件,如果CausesValidation=true的话按下按钮就会首先检测是不是都通过了检验控件的检验。 下面再说两点: ...
1.6.2Post提交表单(模拟表单提交) /** * post方式提交表单(模拟用户登录请求) */ public void postForm() { // 创建默认的httpClient实例. CloseableHttpClient httpclient = HttpClients.createDefault...