利用cookie锁定客户端登录

流程:首先直接访问jsp,呈现登录页面,填好用户名、密码后,点击登录进行验证。
action验证时若没有登录码,则生成一个。并写进数据库。
页面验证到时候,取到action传递的参数,设置cookie。

java:

ServerUserBean userBean = loginService.login(shopNo, username, password);
if (null == userBean) {
request.setAttribute("flag", "0");
} else {
request.setAttribute("flag", "1");
request.setAttribute("key", key);
String logKey = userBean.getLogKey();
request.setAttribute("logKey", StringUtils.isBlank(logKey) ? "0" : "1");//是否存在登录码
if (StringUtils.isBlank(logKey)) {
String val = RandomUtil.getString(10);
request.setAttribute("val", val);
this.loginService.updLogKey(val, userBean.getShopId());
} else {
request.setAttribute("val", logKey);
}
ActionContext.getContext().getSession().put("shopId", userBean.getShopId());
ActionContext.getContext().getSession().put("shopName", userBean.getShopName());
}


jsp:

<li id="logMsg" style="padding-left: 60px"><font color="red">
<span id="errorMsg"></span>
<%
if("0".equals((String)request.getAttribute("flag"))){
out.print("工号、用户名或密码错误!");
} else if("1".equals((String)request.getAttribute("flag"))){
%>
<script type="text/javascript">
var key = '<%=request.getAttribute("key") %>';
var val = '<%=request.getAttribute("val") %>';
if('<%=request.getAttribute("logKey") %>' == '0'){
SetCookie(key, val);
}

if(val == GetCookie(key)){
window.location = prjContextPath + '/main.do';
} else {
$('errorMsg').innerHTML = '请向代理商索要授权!';
}
</script>
<%
} else if("2".equals((String)request.getAttribute("flag"))){
out.print("请先登录系统!");
}
%>
</font></li>


//**
* 获得Cookie的原始值
* @param name
* @return
*/
function GetCookie(name){
var arr = document.cookie.split(";");
for(var m = 0; m < arr.length; m++){
var temp = arr[m].split("=");
if(temp[0].replace(" ","") == name){
return unescape(temp[1]);
}
}
}

/**
* 设定Cookie值
* @param name
* @param value
* @return
*/
function SetCookie(name, value){
var expdate = new Date();
expdate.setTime(expdate.getTime() + (30 * 24 * 3600 * 1000));
document.cookie = name + "=" + escape(value) + ("; expires=" + expdate.toGMTString());
}

/**
* 删除Cookie
* @param name
* @return
*/
function DelCookie(name){
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = GetCookie(name);
document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安全验证模块通常会使用会话管理技术来校验用户登录状态。具体来说,当用户在登录页面输入用户名和密码后,服务器会进行身份验证并创建一个唯一的会话 ID,并将该 ID 存储在服务器端。然后,该 ID 会发送回客户端,存储在浏览器的 Cookie 中。之后,每次用户访问需要登录的页面时,浏览器会自动将 Cookie 发送给服务器,服务器根据 Cookie 中的会话 ID 来验证用户的登录状态。 如果用户已经退出登录,或者该会话 ID 在服务器端已经过期,则服务器会拒绝访问请求,并要求用户重新登录。通过这种方式,安全验证模块可以有效地保护用户的账户安全,防止未经授权的用户访问受保护的资源。 ### 回答2: 安全验证模块校验用户登录状态的方式有多种,以下是其中几种常见的方法: 1. 基于会话验证:安全验证模块可以利用会话来跟踪用户的登录状态。当用户成功登录后,会话ID会被分配给该用户,并在会话中记录用户的身份认证信息。当用户请求需要登录状态的资源时,安全验证模块会检查会话中的认证信息,以确定用户的登录状态是否有效。 2. 基于令牌验证:安全验证模块可以使用令牌验证机制来校验用户的登录状态。当用户成功登录后,安全验证模块会生成一个令牌,并将其返回给用户。用户在后续请求中需要在请求头或参数中携带该令牌,安全验证模块通过验证令牌的有效性来确定用户的登录状态。 3. 基于Cookie验证:安全验证模块可以使用Cookie来校验用户的登录状态。当用户成功登录后,安全验证模块会在用户的浏览器中设置一个包含登录状态信息的Cookie。当用户发送后续请求时,安全验证模块会检查请求中的Cookie信息,以确定用户的登录状态是否有效。 需要注意的是,为了防止安全漏洞和非法访问,安全验证模块通常还会采取一些额外的安全措施,比如对会话进行过期时间管理、加密信息传输等。此外,具体的安全验证方法也会根据不同的系统架构和安全需求而有所不同。 ### 回答3: 安全验证模块在校验用户登录状态时会使用多种方式来确保用户的身份和登录状态的有效性,并防止未经授权的访问。以下是一些常见的校验方式: 1. 会话验证:安全验证模块会使用会话标识符来验证用户的身份。用户在登录时会生成一个唯一的会话标识符,并将其存储在服务器端或客户端Cookie中。在每个请求中,安全验证模块会比对会话标识符,如果匹配则表示用户处于登录状态。 2. Token验证:基于令牌的身份验证是一种常见的验证机制。用户在成功登录后会生成一个加密的令牌,并将其存储在本地端,每次请求都会携带这个令牌进行验证。安全验证模块会校验令牌的有效性和合法性,如果通过验证则表示用户登录状态有效。 3. IP地址验证:安全验证模块可以记录用户登录时的IP地址,并在后续请求中进行IP地址的验证。如果发现请求的IP地址和登录时的IP地址不一致,可能会提示用户重新登录或进行其他安全措施。 4. 双因素验证:在一些敏感操作中,安全验证模块可能会要求用户进行双因素验证,如输入验证码、短信验证等。这样可以进一步提高用户登录状态的安全性。 5. 安全策略配置:安全验证模块基于一系列的安全策略来校验用户登录状态。这些策略可能包括密码强度要求、账号锁定机制、登录尝试限制等,目的是提供多层次的保护措施,防止恶意登录。 综上所述,安全验证模块通过会话验证、Token验证、IP地址验证、双因素验证以及安全策略配置等方式,对用户的登录状态进行校验,确保用户的身份和登录状态的有效性,保障系统的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值