cookie和session

**

一、cookie

**
1、cookie是什么?
cookie是servlet发送到web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。
2、cookie的产生过程
第一步:创建cookie。

Cookie remember_cookie = new Cookie("remember", username);

第二步:服务器通过response添加到浏览器。

//URL一定要包括uri
String uri=request.getContextPath()+"/back/ToLoginPageServlet";
remember_cookie.setPath(uri);
response.addCookie(remember_cookie);

第三步:浏览器通过cookie头,将cookie的信息携带到服务器
第四步:服务器通过request读取cookies,然后通过name来找到自己想要的cookie

Cookie[] cookies = request.getCookies();
Cookie remenberUsername =CookieUtil.cookieUtil(cookies, "remember");

注意:只有当URL包含了cookie的路径时,才会将cookie的信息携带给浏览器,在写程序的过程中就少写了一个单词,造成URL没有包括cookie的路径,结果得到的cookie的值都是null,找了很久的错都没找出来,还是经验不足呀。

3、cookie的常见方法
①设置cookie的时效:
setMaxAge(秒为单位),若为正数,cookie的时效就是你设置的时间;若为0,则表示立即删除该cookie;若为-1,则表示不存储该cookie。
有set当然也有getMaxAge()。
②设置cookie的路径:
setPath(cookie的路径),这个路径一定要是URL包含它。
③将cookie添加到浏览器:
response.addCookie(cookie)
④获得所有的cookie:

Cookie[] cookies = request.getCookies();

4、实现自动登录和记住账号
第一步:获得所有的cookie值

Cookie[] cookies = request.getCookies();
Cookie remenberUsername =CookieUtil.cookieUtil(cookies, "remember");
Cookie autoLogin = CookieUtil.cookieUtil(cookies, "autoLogin");

第二步:判断remenberUsername和autoLogin是否为空
2.1:如果autoLogin不为空,则进行自动登录操作

if(autoLogin!=null){
            System.out.println("自动登录");
            //进行自动登录
            String usernameAndPassword = autoLogin.getValue();
            String[] split = usernameAndPassword.split("##");
            String username=split[0];
            String password=split[1];
            SysUser sysUser = new SysUser();
            sysUser.setUsername(username);
            sysUser.setPassword(password);
            //进行登录操作
            SysUser login = userService.sysUserService(sysUser);
            String name = login.getName();
            if(login!=null){//登录成功
                //3、直接跳转到登录成功界面             
                request.setAttribute("name", name);
                String contextPath = request.getContextPath();
                //request.getRequestDispatcher("/WEB-INF/jsp/back/success.jsp").forward(request, response); 
                response.sendRedirect(contextPath+"/back/ManagerServlet?method=tomanagerUI");   
            }
        }

2.2如果remenberUsername不为空,则将用户名设置为前一次登录的 用户名

if(remenberUsername!=null){
            //设置用户名
            String username = remenberUsername.getValue();
            request.setAttribute("username", username);
        }

第三步:如果两个都不是,则进行登录操作

5、如何实现登出操作
将cookie的时效设置为0,但是这个好像不能在浏览器中删除cookie,但是可以直接跳到登录界面,用户名和密码都是空的。
在写注销的页面跳转时也遇到了一点点小问题,由于页面是分为三大块的,分别是上、中、下。页面截图如下:
这里写图片描述
退出按钮是在上面那个页面上,所以当时就写了href,进入注销的servlet,导致只有上面那部分跳到了登录界面,如下图:
这里写图片描述
后来在上加了一个target=”_top”就可以了。

当我们获得的cookie值为空的时候,我们不妨看两个地方:
1、在浏览器的设置里面是否将允许网站保存和读取Cookie数据关闭了。
这里写图片描述
2、设置Cookie的路径的时候URL是否包含了它。

二、session

1、Session是什么?
Session是服务器端的会话保存技术。
2、Session的创建过程
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识——-称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

3、如何创建和销毁Session

//创建Session
HttpSession session = request.getSession();
                session.setAttribute("validateCodeServer", stringBuilder);
//session清空
HttpSession session = request.getSession();
session.invalidate();
    //得到服务器存的验证码
HttpSession session = request.getSession();
Object attribute = session.getAttribute("validateCodeServer");

4、Session什么时候销毁
①服务器非正常关闭
②一次会话结束或者超过设置的时间,web.xml->SessionConfig timeout
③手动销毁:session.invalidate();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值