Cookie和Session 登录

Cookie 实现免登陆和Session

01、 需求说明
完成用户登录功能
登录成功后跳到成功页面,显示用户名
登录失败可以跳回登录页面
登录成功后后续操作均能显示当前登录的用户名
02、完成代码

DologinServlet.java

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	//解决中文乱码
	req.setCharaterEncoding("utf-8");
	
    //[1]接受页面(前台的页面)的数据
    String uname = req.getParameter("uname");

    String pwd = req.getParameter("pwd");

    String ch = req.getParameter("ch");

    //[2]数据的处理--连接数据库作比较返回结果
    boolean  flag=false;
    if("是下他".equals(uname)&&"123".equals(pwd)){
         flag=true;
    }
    //[3]根据返回的结果给用户做出响应
     if(flag){
     	/**********Session实现欢迎xx登录***********/
     	
			//[A]获得session对象
			HttpSession session = req.getSession();
			//[B]把对应的值保存到session中
			session.setAttribute("uname",uname);

        /**********使用Cookie记住密码的操作***********/
         
         //[1]申请卡片  填写卡片的信息
         	//把uname 中文的字符串进行UTF-8格式的编码
         Cookie  cookie=new Cookie("u",URLEncoder.encode(uname, "utf-8"));
         Cookie  cookie2=new Cookie("p",pwd);
         //[2]规定卡片的使用规则
           //指定卡片的使用范围   --/  在当前服务器内都有效   /servlet04--只在当前项目中有效
           cookie.setPath("/");
           cookie2.setPath("/");

           //设置Cookie的有效的时间
           if("yes".equals(ch)){
               //勾选了记住我操作
               //设置cookie 有效的时间
               cookie.setMaxAge(60*60*24*10);
               cookie2.setMaxAge(60*60*24*10);
           }else{
               cookie.setMaxAge(0);
               cookie2.setMaxAge(0);
           }
         //[3]把卡片交给到用户手中
          resp.addCookie(cookie);
          resp.addCookie(cookie2);
        //登录成功
         resp.sendRedirect("/servlet04/success.jsp");
     }else{
        //登录失败
         req.setAttribute("msg","用户名和密码不匹配");
         req.getRequestDispatcher("/login.jsp").forward(req,resp);
     }
}

Login.jsp

<body>
    <%
        String  uname="";
        String  pwd="";
        String  ch="";
        //获得所有本地Cookie 内容
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
        for(Cookie  c :cookies){
            if("u".equals(c.getName())){
                // c--代表的就是用户名对应的Cookie对象
                  uname= URLDecoder.decode(c.getValue(),"utf-8");
                  ch="checked";
            }
            if("p".equals(c.getName())){
                // c--代表的就是密码对应的Cookie对象
                  pwd= c.getValue();
            }
        }
        }
    %>
    
    <h3>登录页面</h3>
   <form action="DoLogin">
          <p>
             用户名:<input type="text" id="uname" name="uname"  value="<%=uname%>"/>
          </p>
           <p>
             密码:<input type="text" name="pwd" value="<%=pwd%>"/>
           </p>
           <p>
            <input type="checkbox" name="ch" value="yes" <%=ch%> />记住密码
           </p>
           <p>
               <input type="submit"  value="登录"/>
           </p>
   </form>
</body>

success.jsp(登录成功界面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	<hr/>
	<a href= "update.jsp" >update.jsp</a>
	<hr/>
	JsessionID<%=session.getId() %>
	
</body>
</html>

update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>update.jsp</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	
	<hr/>
	<a href= "delete.jsp" >delete.jsp</a>
	<hr/>
	JsessionID<%=session.getId() %>

</body>
</html>

delete.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>delete.jsp</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	
	<hr/>
	JsessionID<%=session.getId() %>

</body>
</html>

03、理解示意图
cookie

在这里插入图片描述
session
在这里插入图片描述
04、Session 的失效时机
[1]Session.invalidate()
[2]超过最大非活动间隔时间
[3]关闭浏览器(该方式没有立刻结束session)
session失效的方式

[1]手动注销sesison
session.invalidate();
[2]超过session 活动的有效时间
Session 最大活动时间是30分钟,我们可以更改这个默认的时间
A、更改TomCat中web.xml中的配置
影响的是:所有项目中的所有session

 <session-config>
    <session-timeout>30</session-timeout>
 </session-config>

B、更改自己项目的web.xml
影响的是:当前项目的所有session

    <session-config>
     <session-timeout>40</session-timeout>
   </session-config>

C、更改当前项目的当前session 失效的时间
session.setMaxInactiveInterval(10);
[3]关闭浏览器
这种红方式只是把浏览器中保存到cookie 中的Jsession 给清除了
保存到服务器中的session并没有真正的消失

05、Session和Cookie的区别
cookie数据存放在客户端,session数据放在服务器上(sessionid可以通过cookie保存在客户端,也可以使用URL重写方式)
cookie不是很安全(可以加密),别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
Cookie的数据都以字符串的形式保存。Session中可以保存对象信息。
典型使用
Cookie:记住我 最近浏览商品 网页皮肤
session:登录信息 购物车(也可以使用Cookie)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AloneDrifters

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值