网站制作将栏目分类,用jsp做的可运行的网站,wordpress无法找到该页,直播平台创建公会文章目录 1. Cookie 和 Session1.1 Cookie1.2 理解会话机制 (Session)1.2.1 核心方法 2. 用户登录2.1 准备工作2.2 登录页面2.3 写一个 Servlet 处理上述登录请求2.4 实现登录后的主页 3. 总结 1. Cookie 和 Session
1.1 Cookie
cookie 是 http 请求 header 中的一个属性
浏… 文章目录 1. Cookie 和 Session1.1 Cookie1.2 理解会话机制 (Session)1.2.1 核心方法 2. 用户登录2.1 准备工作2.2 登录页面2.3 写一个 Servlet 处理上述登录请求2.4 实现登录后的主页 3. 总结 1. Cookie 和 Session
1.1 Cookie
cookie 是 http 请求 header 中的一个属性
浏览器持久化存储数据的一种机制 网页无法访问主机的文件系统要想存储数据就得通过其他的凡是
cookie 中保存的数据也是键值对的格式用户自定义的 最终还是要把这个键值对发送回服务器的
服务器要使用 cookie 来完成一些业务逻辑 其中有一个 特殊的情况就是使用 cookie 存储当前用户的身份信息 举个栗子
到了医院先挂号.挂号时候需要提供身份证同时得到了一张 “就诊卡”这个就诊卡就相当于患者的 “令牌”后续去各个科室进行检查诊断开药等操作都不必再出示身份证了只要凭就诊卡即可识别出当前患者的身份看完病了之后不想要就诊卡了就可以注销这个卡此时患者的身份和就诊卡的关联就销毁了 (类似于网站的注销操作)又来看病可以办一张新的就诊卡此时就得到了一个新的 “令牌” 1.2 理解会话机制 (Session)
服务器同一时刻收到的请求是很多的服务器需要清除的区分清楚每个请求是从属于哪个用户就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系
在上面的例子中就诊卡就是一张 “令牌”要想让这个令牌能够生效就需要医院这边通过系统记录 每个就诊卡和患者信息之间的关联关系 Cookie 是客户端存储数据的机制 在 cookie 中存储的用户身份标识也经常会理解成 sessionId
Session 是服务器存储数据的机制(不算持久化存储) 服务器juice存储了很多的 session 每个用户都有一个自己的 session也有不同的 sessionId
上面两个往往会相互配合使用的
服务器会通过类似于 hash 这样的键值对来存储 session sessionId 就是 key.session 本身就是 value 在session 里面又可以存储各种的用户自身的信息也是程序员自定义的 目前学到了大量的概念都是和“键值对”有关系
query stringheaderbody (form)body (json)cookiesession 本身就是通过键值对的方式管理session 里面存储的内容,也是通过键值对的方式组织的 通过 Servlet api 来操作上述结构 Cookie 是浏览器的机制Servlet 提供了 api 获取到 Cookie Session 是服务器的机制Servlet 内部已经实现好了也提供了 api 可以让我们进行使用
1.2.1 核心方法
HttpServletRequest 类中的相关方法
getCookies() 这个方法拿到请求中所有 cookie 内容每个 cookie 都是一个键值对getSession() 这个方法就能够完成从 cookie 中获得到 sessionId 并且查询出对应 session 的过程 servlet 中通过这个类表示一个会话服务器同时具有多个会话 服务器上就会存在一个类似于这样的 入股 sessionId 没有从 hash 喵查到也嫩帮我们自定的创建出新的键值对分配新的 sessionId以及创建一个新的 HttpSession 对象 HttpSession 类中的相关方法
一个 HttpSession 对象里面包含多个键值对我们可以往 HttpSession 中存任何我们需要的信息
getAttribute(Stringname) 该方法返回在该 session 会话中具有指定名称的对象如果没有指定名称的对象则返回 null session 对象本身也是一个键值对的形式void setAttribute(Stringname, Object value) 该方法使用指定的名称绑定一个对象到该 session 会话
通过这些键值对就通过上述的这两个 Attribute 方法来完成
2. 用户登录
2.1 准备工作
我们通过 HttpSession 类完成一个用户登录界面
登录界面html 发起一个 HTTP 请求触发登录逻辑 通过一个 servlet 处理上述的登录请求 通过这个 Servlet 读取用户名和密码并且验证是否登录成功 如果登录成功就会给当前这个用户创建一个会话并且把得到的 sessionId通过 cookie 返回给客户端客户端就把 cookie 保存起来了网站主页通过另一个 servlet 生成的动态页面 在这个界面中就会把赶在这里的用户数据给显示到页面上
2.2 登录页面 此处预期发送的请求是 POST login Content-Type: application/x-www-form-urlencoded
usernamezhangsanpassword123
使用form 表单Content-Type 就是这种格式 此处的登录使用 json 也可以但是使用 json 就无法使用 form 表单了 浏览器构造 HTTP 请求有这么几种凡是
url 输入地址GET特殊的 html 标签.aimgscriptform 表达GETPOSTajaxGETPOSTPUTDELETE…
2.3 写一个 Servlet 处理上述登录请求 equals 内部能够针对 参数为 null 做好处理 这个方法就是根据 请求的 cookie 中的 sessionI的查询服务器的 hash 表找到对应的 session 对象 如果 cookie 中没有 sessionId首次登录的时候就是没有的 或者 sessionId 没有查到对应的 session 对象 就可以创建出来一个 session 对象出来
参数为 true允许在不存在时自动创建参数为 false不能创建直接返回 null
会创建出一个 sessionId 和一个 session 兑现个把这个键值对保存到 hash 表里并且会把 session 设置到响应中会在相应报头上加上 set-cookie 字段传回给浏览器让浏览器使用 cookie 来保存
这些操作都是 servlet 在内部帮我们封装好了 这里使用 Attribute 的作用主要就是为了让一个数据在多个 servlet 之间共享 同时 Attribute 是会话级别的每个用户/客户端 都是有自己的数据相互之间都不会有干涉 如果这个 Servlet 是通过第一个浏览器调用的 此时Servlet 里面拿到的就是 zhangsan 这个 Session 对象,及其里面的数据
如果这个 Servlet 是通过第二个浏览器调用的 此时 Servlet 里面拿到的就是 lisi 这个 Session 对象,及其里面的数据
通过 sessionld 取会话对象.(两人浏览器,sessionld 不同)
同样的页面不同用户看到的数据是不同的 重定向跳转到 index 页面上
2.4 实现登录后的主页 这里的 getSession 是根据 cookie 中的 sessionId 来查询 servlet 这里的 hash 表 参数设置成 false如果查到了就直接返回没有查到就返回 null
会话就可以理解成“用户身份信息”体现 在通过登录操作验证了用户身份之后才能够创建会话 其他页面没有做“验证身份”不应该创建会话 getSession 操作内部 拿着 sessionId 来查询的同一个 sessionId就能拿到同一个 session 对象 不同的 servlet 之间数据的共享 3. 总结
cookie 和 session
浏览器首次访问到登录操作的时候就会在服务器这边验证身份验证通过就会创建会话
服务器就会保存会话消息hash 客户端也会保存身份标识sessionId
后续浏览器在访问这个网站网站的其他界面都会带上 cookiesessionId 服务器不需要让浏览器重新登陆也能识别出浏览器的用户身份信息