Session的介绍与使用(顺带cookie和sessionId)

本文深入解析了Session与Cookie的工作原理及应用流程,包括Session作为服务器端的会话管理对象,Cookie作为浏览器端的小型文本文件,以及它们如何共同实现用户状态的持久化,特别强调了SessionId在这一过程中的关键作用。

什么是Session?

存在服务器(tomcat为例子)的一个会话管理对象

什么是Cookie?

 存在浏览器端的一个小型文本文件(用来存相关数据的)

什么是SessionId?

用来获取Session回话的一个序列号(由随机值 + 实际 + jvm的id)jvm的id由硬件信息计算得出

Session是什么时候创建的?

HttpSession session =requset.getSession();创建得到,
同时可以通过session.getId()得到  SessionId

Session和Cookie的作用?

都是用来存用户的数据信息,都有有效期,都可以通过对应手段存到文件中

(Cookie在使用的过程中是在内存中的,关闭浏览器就会消失)除非存文件中

(Session存在服务器中,有一定的存储时间)

实际的开发之间的使用流程

一、浏览器请求服务器,在服务器上通过request.getSession()产生session对象

HttpSession session =requset.getSession();

二、通过产生的session对象获取sessionId 

String sessionId = session.getId()

三、将sessionId返回给浏览器,存进cookie中

  1. 获取cookie
    Cookie[] cookies = request.getCookies();
  2. 对cookie进行操作(增、删、改、查、存)
     
  3. 返回给浏览器
    response.addCookie(cookie);

    Cookie的相关操作

    创建方式获取cookie对象:    Cookie cookie = new Cookie(name, value);

    已有方式获取Cookie对象:    Cookie[] cookies=req.getCookies();

    Cookie对象中的数据操作: 
               1、 获取名称:cookie.getName()
               2、 获取值: cookie.getValue()
               3、设置名称:cookie.setName()
               4、设置值:cookie.setValue()

    设置Cookie的存留时间 例如:cookie.setMaxAge(365 * 24 * 60 * 60);单位秒

    保存Cookie对象到浏览器:response.addCookie(cookie);

    设置Cookie存储路径:cookie2.setPath("/");

 

更新Session中的数据

session.setAttribute 保存(方法会默认保存)
session.getAttribute 获取

 

 

 

package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; public class HttpTest { private HttpURLConnection hc = null; private static final String oneUrlString = "http://xxx.jsp"; private static final String twoUrlString = "http://xxx.action"; public String getSessionId() { String sessionId = ""; try { URL url = new URL(oneUrlString); hc = (HttpURLConnection) url.openConnection();//默认的用GET提交 hc.setDoOutput(true); hc.connect(); Map map = hc.getHeaderFields(); //得到Cookie的所有内容,包括SESSIONID,在进行下次提交的时候 直接把这个Cookie的值设到头里头就行了 //淡然只得到SESSIONID也很简单的 ,但是有时候Set-Cookie的值有几个的 List list = (List) map.get("Set-Cookie"); if(list.size() == 0||list == null) { return null; } StringBuilder builder = new StringBuilder(); for(String str : list) { sessionId = builder.append(str).toString(); } hc.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sessionId; } public String getResponseContext(String parameters) { String responseContext = ""; try { URL url = new URL(twoUrlString); hc = (HttpURLConnection) url.openConnection();//使用POST提交 hc.addRequestProperty("Cookie", getSessionId()); hc.setDoOutput(true); hc.connect(); OutputStream out = hc.getOutputStream(); //参数是a=""&b=""这样拼接的一个串 out.flush(); out.close(); out.write(parameters.getBytes(),0,parameters.getBytes().length); InputStream in = hc.getInputStream(); InputStreamReader reader = new InputStreamReader(in,"gb2312"); BufferedReader read = new BufferedReader(reader); StringBuilder builder = new StringBuilder(); String str = ""; while((str = read.readLine()) != null) { builder = builder.append(str); } read.close(); reader.close(); in.close(); hc.disconnect(); responseContext = builder.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return responseContext; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗水人间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值