会话技术

来源:互联网 发布:手机广告设计软件 编辑:程序博客网 时间:2024/05/23 01:24

会话技术

概念:

会话就是一次谈话,在web中指,浏览器和服务器之间的一次通信。包含多次请求和响应,可以在一次请求的多次请求中共享数据。

客户端会话技术:cookie

数据储存在客户端

原理:

1.客户端请求一个资源,服务器做出响应时,会发送set-cookie头,共享数据。
2.客户端接收到响应,会将数据保存在客户端浏览器。
3.客户端再次请求服务器时,会通过cookie头携带该数据。
4.服务端收到请求,回来解析获取数据。

cookie持久化问题

cookie默认保存在浏览器的内存中,一旦浏览器关闭内存释放,存的数据就不见了。
设置cookie的存活时间,可以使其持久化。
setMaxAge(int second)
正数:存在硬盘里
负数:存在内存里
0:删除cookie

cookie不支持中文

要想使用中文可以使用将其编码,取出时再解码的方式。

不能跨浏览器

 String string = "任凯";          String encode = URLEncoder.encode(string, "UTF-8");          Cookie cookie = new Cookie("num1", encode);          cookie.setMaxAge(60*60*24*7);          response.addCookie(cookie);
Cookie[] cookies = request.getCookies();        for (Cookie c : cookies) {            System.out.println(URLDecoder.decode(c.getValue(), "utf-8"));        }

服务端会话技术 session

将数据吧保存在服务器端

原理:

session依赖于cookie存在

java中session的实现

//获取sessionHttpSession session = request.getSession();//session的三个主要的方法session.getAttribute("num1");session.setAttribute("num1", "100");session.removeAttribute("num1");

session中的一些细节问题

1.
浏览器关闭了,session不一样了。
Cookie没了。jsessionid没了。
服务器关闭了,session一样吗?不一样。内存释放了。
优化:虽然对象不一样了,但是session中存储的数据还是一样的
钝化:服务器正常关闭后,session对象被写入硬盘的文件中
活化:服务器开启后,将文件还原为内存的session对象
2
session的生命周期
创建:request.getSession();
会根据jsessionid查找是否存在session,如果不存在就创建
销毁:服务器关闭
session超时
3
如果客户端禁用了 cookie session 应该如何自处
客户端禁用了cookie session就会不一样

                    PrintWriter pw = response.getWriter();                    HttpSession session = request.getSession();                    String id = session.getId();                    String href = "/day09/s1";                    href = response.encodeRedirectURL(href);                    System.out.println(href);                    pw.write("<a href='"+href+"'>s1</a>");

4.获取session:
getSession():会根据jsessionid值查找是否存在sesison对象,如果没找到,则创建新的session
getSession(boolean flag):
true:默认值,会根据jsessionid值查找是否存在sesison对象,如果没找到,则创建新的session
false:会根据jsessionid值查找是否存在sesison对象,如果没找到,则返回null