在表单提交时,经常会发生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数据。如果你希望每次请求都保存Session(这样可以更新Session过期时间),你需要在`settings.py`中设置`SESSION_SAVE_EVERY_REQUEST ...
使用 session_cache_limiter 方法可能会出现的问题是,如果用户修改了已经提交的信息,表单页面所呈现的信息还是缓存里的信息,没能及时自动刷新。解决方案是,在 session_start 前面加上: `session_cache_limiter...
当表单提交时,服务器会验证这个令牌是否有效,以此来检测表单是否被重复提交。如果令牌无效或者已使用过,服务器就会拒绝处理请求。 在控制器中,`form_token(U('.../index'));` 这行代码是在生成表单令牌时指定的...
当用户提交表单时,服务器会检查session中的token与表单提交的token是否匹配,如果匹配并且是首次提交,那么执行业务逻辑,否则视为重复提交并拒绝处理。 具体实现步骤如下: 1. **配置拦截器**:在struts.xml配置...
然而,Web应用在处理表单提交时可能会遇到一个问题,即用户在短时间内连续点击提交按钮,导致服务器接收到重复的请求,这被称为表单重复提交。为了解决这个问题,开发者通常会采用Token机制。 Token机制的核心思想...
当用户首次提交表单时,服务器会生成一个随机的、唯一标识的Token,并将其存储到用户的会话(Session)中,同时将该Token放入到表单隐藏字段中。当用户提交表单时,服务器会检查提交过来的Token是否与Session中的...
在表单提交时,服务器会生成一个唯一的Token并将其存储到用户的会话(session)中,同时将Token返回给客户端,一般放在隐藏字段中。当表单提交时,客户端会将这个Token一起发送回服务器。服务器接收到请求后,会检查...
9. **session过期与销毁**:虽然这个案例没有涉及,但通常session会有一定的生命周期。如果用户长时间不活动,session会自动过期,服务器会清除其中的属性。开发者可以设置session的最大空闲时间,或者在适当的时候...
传统的ASP.NET页面中,`ViewState`默认开启,允许用户在表单提交后仍能看到之前的输入。在新的ASP.NET方式下,`ViewState`会自动处理表单值的保留,使得用户在提交表单后无需重新输入数据。 ```html <!-- 传统ASP...
在处理包含汉字的表单提交信息时,为了正确获取汉字,需要在JSP页面中设置字符编码。例如,使用`request.setCharacterEncoding("gb2312")`来设定请求的编码为GB2312,确保汉字能被正确解析。 禁用缓存功能是防止...
这样一旦用户超过30分钟未进行任何操作(比如点击页面、提交表单等),其Session就会自动失效,从而强制用户重新登录验证身份。这种方式既保证了安全性又避免了频繁要求用户登录带来的不便。 #### Session失效的...
另一种方式是在HTML表单中添加一个隐藏字段,该字段包含session ID,当用户提交表单时,ID会被一起发送到服务器。 补充:Session 的删除 当用户关闭浏览器或session超时时,session通常会被销毁。此外,开发者也...
另外,定期更新Session ID,设置合理的Session过期时间也是防止Session劫持的有效手段。 6. **管理大量Session**:在高并发的大型应用中,单纯依赖内存来存储所有Session可能造成资源浪费。这时,可以考虑使用...
- 例如,可以在URL中加入Session ID参数,或者通过隐藏表单字段等方式来传递Session ID。 3. **共同目标**:虽然Session和Cookie有不同的特性和应用场景,但它们的共同目标都是为了保持用户的会话状态,提高用户...
6. **处理session过期**:默认情况下,session会在浏览器关闭时失效。若需更长的会话时间,可设置`cookie.maxAge`来指定session的有效期。 ```javascript app.use(session({ ..., cookie: { maxAge: 3600000 },...
3. **防止Session过期**: - 默认情况下,ASP.NET的Session会在20分钟内无活动后自动失效。如果需要更长时间,可以在Web.config文件中配置`<sessionState timeout="minutes">`,其中"minutes"是所需的分钟数。 4. ...
- 当用户提交表单后,数据可以通过 `$_GET` 或 `$_POST` 超全局数组来接收。在 URL 中传递的数据会被自动进行 URL 编码,`urlencode()` 和 `urldecode()` 分别用于编码和解码 URL 变量。 - `$_GET['page']` 用于...
2. **提交验证**:在服务器接收到表单提交时,检查Session中的状态是否与提交的表单数据对应。如果匹配,说明这是第一次提交,可以正常处理;如果不匹配或者Session中没有找到对应的状态,那么可能是重复提交,此时...
例如,当用户滚动页面、点击按钮或者提交表单时,服务器可以通过更新Session最后访问时间来延长其有效期。 再次,安全层面的考虑。过短的Timeout可能导致用户频繁登录,而过长的Timeout则增加了账户被他人恶意使用...
这有助于在处理表单提交后立即清除缓冲,防止用户通过后退按钮看到已提交的数据。 - `Response.Expires=0` 和 `ExpiresAbsolute=Now()-1`:这两个属性用来设置页面的过期时间,设置为0表示立即过期,而设置为负值或...