JSP基础:(3)cookie对象与session对象

Cookie 对象    

        Cookie 是一种保持 Web应用程序连续性的一种方法。
        Cookie 能够帮助 Web 站点保存有关访问者的信息,以便服务器更好识别访问者。
        是实现会话跟踪的一种重要手段作为客户端信息的一类,cookie信息以文本的的形式保存在客户端的硬盘上。
        在系统盘下\Documents and Settings”,当前登录名对应的目录,可以看到一个名为“cookie”子目录。在该目录下,有许多文本文件,保存的就是cookie信息。
        Cookie文件是属于文本文件,但是经过加密过的,一般通过普通文本工具无法查看到内容。
         由于Cookie文件是经过加密处理的,所以在一般的用户看来只是一堆没有任何意义的数字和字母组合,但对于服务器的处理程序可以通过它完成很多功能。
            浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4 KB,不同的浏览器对cookie限制不同。          

 如何开启浏览器cookie???

                浏览器开启cookie,找到internet属性-->隐私-->高级,点击替代自动cookie,再点击总是允许会话            

如何读写Cookie对象?

            使用cookie必须结合request对象和response对象。写cookie到客户端使用response,读取客户端的cookie使用request。

                写:                

 Cookie c=new Cookie(String,String);
 c.setMaxAge(int);//存活时间,单位:秒
 response.addCookie(c);

                读:                   

                  Cookie[] cs=request.getCookies();
                    for(int i=0;i<cs.length;i++){
                        //遍历cookie数组
                    }

            Cookie对象的方法

public Cookie(String,String) 构造方法
 void setMaxAge(int) 设置cookie的过期时间。如果不设置,则cookie只在当前会话中有效,且不会保存到客户端磁盘中,关闭浏览器后会消失。
String getName() 获取cookie的名称
String getValue() 获取cookie的值
 void setValue(String) 设置cookie的值
 void setPath(String) 设置cookie在哪个目录下的JSP文件中有效。如果参数是/,此时服务器上的所有页面都可以接收到该cookie

            一个cookie的demo:

                需求:
                      通过Cookie记录用户名和密码,当用户登录后通过Cookie保存用户名,下次访问该页面时,显示用户名信息。
                    首先,在登录页面输入用户名和密码登录后将用户名和密码通过cookie保存在客户端访问allcook.jsp页面可以查看刚才保存的cookie信息。
                login2.jsp:                    

               <%@ page contentType="text/html;charset=gbk"%>
                        ……
                        <form action="addcook.jsp" method="post">
                            用户名:<input type="text" name="nam"><br>
                            密  码:<input type="text" name="pwd"><br>
                            <input type=submit value="登录">
                        </form>
                        ……

                addcook.jsp                       

                   <%
                        request.setCharacterEncoding("gbk");
                        String nam=request.getParameter("nam");
                        String pwd=request.getParameter("pwd");
                        //创建Cookie对象
                        Cookie c1=new Cookie("nam",nam);
                        Cookie c2=new Cookie("pwd",pwd);
                        c1.setMaxAge(300);//保存在客户端磁盘中,时间5分钟
                        c2.setMaxAge(300);
                        //将Cookie写入客户端磁盘
                        response.addCookie(c1);
                        response.addCookie(c2);
                    %>
                    Cookie被写在了客户端的文件中

                allcook.jsp:                   

                <%@ page contentType="text/html;charset=gbk"%>
                        ……
                        <%
                        //获取客户端所有Cookie对象
                        Cookie[] cs=request.getCookies();
                            for(int i=0;i<cs.length;i++){
                                String name=cs[i].getName();
                                String value=cs[i].getValue();
                                out.println(name+"="+value+"<br>");
                            }
                        %>

          Cookie的弊端:

                cookie注意事项:
                    cookie信息是在浏览器中的,但并不是所有的浏览器都支持cookie功能,不同浏览器对cookie有不同的限制
                    Cookie传输的数据大小(4KB)限制了一些需要大数据存储应用的需求。
                    不同的网站中存储的cookie不是通用的。
                    cookie的安全性上面临居多挑战和质疑
                    例如:cookie信息可能泄露个人隐私或被用来收集用户上网习惯,收集用户信息登录用户账号

session对象:

            session对象提供一种机制,让服务器能辨认不同的客户端。是服务器端和客户端另一种保持状态的有效方法。 与Cookie不同的是Session信息保存在服务器端。服务器通过不同的session对象来记录不同的客户端。
            session的方法:

String getId() 取得session的ID
 void invalidate() 取消session对象,并将对象存放的内容完全抛弃
 void setMaxInactiveInterval(int) 设定最大session不活动时间,若超过这个时间不活动,session将会失效,单位为秒

           两种方式获取sessionID

                            session.getId();

                           request.getRequestedSessionId();
                           

            会话结束的四种方法

                1.在web.xml文件中设置他的最大活动时间                   

                  <!--设置 session 的过期时间,单位是分钟-- >
                    <session-config>
                          <session-timeout>30</session-timeout> 
                    </session-config>
                    值为-1表示永不过期,不推荐使用。

                2.在JSP中通过session.invalidate()方法直接关闭一个会话
                3.关闭浏览器后,服务器并不知道浏览器已经关闭,session对象依然存在,但”无人认领”,将自动过期。
                4.调用session.setMaxInactiveInterval(1),1秒钟内不发请求则过期。

            一个session的demo:
                需求:
                    当用户正常登录验证后,转发到管理页面,而当用户未正常登录则无法访问管理页面。
                login.jsp:                 

                    ……
                    <form action="check.jsp" method="post">
                        用户名:<input type="text" name="nam"><br>
                        <input type=submit value="登录">
                    </form>

                   show.jsp:                   

                 <%@ page contentType="text/html;charset=gbk"%>
                    …//如果不登录,直接访问此页面时,则通过session存入的值进行验证
                        <% if(session.getAttribute("nam")==null){ %>    
                            您还没有登录,无法访问此页面
                             //此处设置响应转发回登录页面,进行登录。
                        <%} else {%>
                        welcome,<%=session.getAttribute("nam")+"" %>
                            <a href="exit.jsp">注销登录</a>
                        <%} %>
                        <br><br>
                        <center>
                        <%
                            if(session.getAttribute("nam")==null){
                        %>
                        <a href="login.jsp">点击这里</a>返回登录页面.
                        <%} else {%>
                        网页正文内容
                        
                    <%@ page contentType="text/html;charset=gbk"%>
                    <%    //清空会话中的值,并销毁当前会话对象
                        session.invalidate();
                        response.sendRedirect("show.jsp");
                    %>

                check.jsp:                    

             <%@ page contentType="text/html;charset=gbk"%>
                    <%
                        request.setCharacterEncoding("gbk");
                            String nam=request.getParameter("nam");
                            if(nam!=null){//此处进行登录验证
                                session.setAttribute("nam",nam);//登录成功在session放置用户名
                                response.sendRedirect("show.jsp");
                            } else response.sendRedirect("login.jsp");
                    %>

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/82697908