您的位置:首页 > 编程语言 > Java开发

JavaWeb登录状态保持解决方案

2017-01-04 11:49 281 查看
现在需要用户的网站系统就需要登录和注册,用户登录后可以进行更多权限的操作,但是登录一次之后不能让用户每次都进行登录,需要将这个状态保存下来持久化.

Session是服务器端的会话保持载体,Cookie是浏览器端(客户端)的会话保持载体.

登录流程:

用户登录-登录成功-会话保持-进行其他操作-退出

会话保持:

cookie和session都是key-value类型的数据结构.

cookie中要存储可以识别出用户身份的信息,因为存储在浏览器端,不安全,所以不能存储敏感的信息。

这里可以设置key为“loginuser”,value为用户的id (user_id)

// 新建cookie 客户浏览器端保存当前用户的id
// key-value格式 key-loginuser value-当前用户的id
Cookie cookie = new Cookie("loginuser", user.getUser_id() + "");
// 设置客户端cookie
((HttpServletResponse) response).addCookie(cookie);


session存储在服务器端,可以保证安全,可以直接存储当前登录的User对象.

// 设置session 服务器端保存登录用户信息
HttpSession session = ((HttpServletRequest) request)                .getSession(true);
// session是key-value格式
// 把user_id作为key,value是user对象
session.setAttribute(user.getUser_id() + "", user);


获取用户user_id

int user_id = Integer.parseInt(CookieUtils.getCookieFromCookies(((HttpServletRequest)req).getCookies(), "loginuser").getValue());


Cookie工具类 CookieUtils.java

package cn.edu.bzu.group12.orangenews.utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author pangPython
*  Cookie工具类
*/
public class CookieUtils {
//从cookie数组中获取指定key的cookie
public static Cookie getCookieFromCookies(Cookie[] cookies,String target){
Cookie cookie = null;
for (int i = 0; i < cookies.length; i++) {
if(cookies[i].getName().equals(target)){
cookie = cookies[i];
}
}

return cookie;
}
//删除所有cookie
public static void removeAllCookies(HttpServletRequest req,HttpServletResponse resp){
Cookie[] cookies = req.getCookies();
for(Cookie cookie: cookies){
cookie.setMaxAge(0);
cookie.setPath("/");
resp.addCookie(cookie);
}
}
//根据cookie名称移除cookie
public static void removeCookieByName(String cookie_name,HttpServletRequest request,HttpServletResponse resp){
Cookie cookie = null;
Cookie[] cookies = null;
// 获取当前域名下的cookies,是一个数组
cookies = request.getCookies();
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
if((cookie.getName()).compareTo(cookie_name) == 0 ){
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息