当前位置:   article > 正文

Cookie、Session 与 application_application session和cookie

application session和cookie

                                      Cookie、Session 与 application

由于Http协议是无连接性的协议,即每次只访问服务器一次,然后断开连接,在跳转页面时,会导致信息丢失。这时候,Cookie和Session就解决了这个问题。application则是服务器端的一块内存区域,各个客户端访问的是同一个application。这里以Java语言为例。
Cookie:
1.Cookie是储存在客户端的文件,存储名值对(类似Map)。
2.Cookie是服务器在客户端写的文本文档。
3.客户端可以阻止服务器在客户端写入Cookie。
4.服务器可以读取客户端的Cookie,但仅限于Webapp自己写入客户端的Cookie。
5.Cookie可以区分浏览器。
6.Cookie有生存周期,可以通过setMaxAge(arg)的方式设置Cookie生存周期,没有设置生存周期的Cookie随浏览器关闭而结束生命周期。
7.Cookie在设置Cookie的当前目录或者子目录(该目录指的是POM.XML中的URL)中有效,或者浏览器子窗口中有效。
新建Cookie:
  1. import java.io.*;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.*;
  4. public class SetCookies extends HttpServlet {
  5. @Override
  6. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  7. response.setContentType("text/html");
  8. //新建一个Cookie
  9. Cookie cookie = new Cookie("Session-cookie", "svalue");
  10. //通过response对象向客户端中添加Cookie
  11. response.addCookie(cookie);
  12. cookie = new Cookie("Persistent-cookie", "pvalue");
  13. cookie.setMaxAge(3600);
  14. response.addCookie(cookie);
  15. PrintWriter out = response.getWriter();
  16. out.println("<a href='ShowCookies'>ShowCookies</herf>");
  17. }
  18. }

显示Cookie:
  1. import java.io.*;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.*;
  4. public class ShowCookies extends HttpServlet{
  5. @Override
  6. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
  7. //设置反馈给客户端的内容
  8. resp.setContentType("text/html");
  9. PrintWriter out = resp.getWriter();
  10. //通过req对象获得客户端所携带的Cookie
  11. Cookie[] cookies = req.getCookies();
  12. if(cookies.length > 0){
  13. for(Cookie cookie : cookies){
  14. out.println(cookie.getName()+ " " + cookie.getValue());
  15. }
  16. }
  17. }
  18. }

Session:
1.Session是记录在服务器端的一系列的用户操作信息,是服务器端开辟的一块内存。
2.Session是与创建Session浏览器的窗口或者浏览器的子窗口关联在一起,其它浏览器无法访问该Session。
3.每个Session都有一个SessionId,每次客户端携带着SessionId获得他独有的Session。
4.Session可以通过两种方式实现,一种是通过Cookie实现(SessionId存储在临时Cookie中),另一种是通过重写URL实现(response.encodeURL();转码+URL后面加入SessionId )。
5.浏览器窗口关闭后,该Session就消失了。
常用代码如下:
  1. import java.io.*;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.*;
  4. public class ShowSession extends HttpServlet{
  5. @Override
  6. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
  7. resp.setContentType("text/html");
  8. HttpSession session = req.getSession(true);
  9. if(session.getAttribute("cnt") == null){
  10. session.setAttribute("cnt", 0);
  11. }else{
  12. session.setAttribute("cnt", (Integer)session.getAttribute("cnt") + 1);
  13. }
  14. PrintWriter out = resp.getWriter();
  15. out.println((Integer)session.getAttribute("cnt"));
  16. out.println("<br>" + session.getId());
  17. }
  18. }

  1. import java.io.*;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.*;
  4. public class SessionInfo extends HttpServlet{
  5. @Override
  6. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
  7. HttpSession session = req.getSession(true);
  8. resp.setContentType("text/html");
  9. PrintWriter out = resp.getWriter();
  10. out.println("is new? " + session.isNew());
  11. out.println("id? " + session.getId());
  12. out.println("create time? " + session.getCreationTime());
  13. out.println("last access time ?" + session.getLastAccessedTime());
  14. out.println("id from req ?" + req.getRequestedSessionId());
  15. out.println("cookie ? " + req.isRequestedSessionIdFromCookie());
  16. out.println("URL ? " + req.isRequestedSessionIdFromURL());
  17. out.println("<a href=" + resp.encodeURL("SessionInfo") + "></a>");
  18. }
  19. }


application:
application其实是ServletContext对象,指的是整个webapp,不同的客户端访问的是同一个application。
下面是一个计数器,计数所有客户端的次数。
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. public class TestApplication extends HttpServlet{
  5. @Override
  6. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
  7. response.setContentType("text/html");
  8. PrintWriter out = response.getWriter();
  9. ServletContext application = this.getServletContext();
  10. Integer count = (Integer) application.getAttribute("count");
  11. if(count == null){
  12. count = 1;
  13. }else{
  14. count = (Integer) application.getAttribute("count");
  15. }
  16. application.setAttribute("count", count + 1);
  17. out.println(count);
  18. }
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/149453
推荐阅读
相关标签
  

闽ICP备14008679号