网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
引出
http请求的特点,无状态,如何保存登陆信息?
cookie是啥,和local Storage的区别,cookie有啥用?
session是啥,session能干啥?
1.http请求的特点—无状态
http请求是无状态的,指的是:http协议协议对于事务处理没有记忆能力,不能保存每次客户端提交的信息,即当服务器返回应答之后,这次事务的所有信息就都丢掉了。如果用户发来一个新的请求,服务器也无法知道它是否与上次的请求有联系。
解决HTTP无状态的方法:
采用会话跟踪技术来解决这个问题。把状态保存在服务器中,只发送回一个标识符,浏览器在下次提交中把这个标识符发送过来;这样,就可以定位存储在服务器上的状态信息了。
会话跟踪的方法:cookie 和 session
2.cookie是啥?能干啥?VS local Storage
(1)初识cookie VS local Storage
如下图所示是cookie
(1)cookie,HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据;
(2)浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上;
(3)不同浏览器访问同一个服务器,cookie空间是独立的;同一个浏览器访问不同的服务器,cookie空间也是独立的;
(4)cookie可以告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态;
(5)Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能;
(6)cookie的本质是一个键值对
local Storage也是一个存储空间,和cookie的区别:
cookie每次访问服务器的时候,会发给服务器,local Storage里的东西保存在本地,在请求服务器的时候,不会发给服务器;
(2)用tomcat的servlet理解cookie
CookieDemoServlet.java代码如下:
package com.tianju.servlet.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/\*\*
\* cookie生成在服务器,发给浏览器,保存在浏览器;
\* 每个网站,都有自己独立的cookie空间
\*/
@WebServlet("/setCookieDemo")
public class CookieDemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// new cookie对象
Cookie cookie = new Cookie("name", "peter");
Cookie cookie1 = new Cookie("age", "19");
cookie.setMaxAge(100);
// 把对象添加到响应中;
resp.addCookie(cookie);
resp.addCookie(cookie1);
resp.getWriter().write("add success");
}
}
如下图所示,访问该服务的时候,由tomcat服务器进行处理,设置了cookie,然后作为响应发给浏览器,浏览器拿到cookie时把cookie存到了浏览器本地的cookie存储空间中;
cookie本质是键值对,主要参数如下:
- Name:这个是cookie的名字
- Value:这个是cooke的值
- Path:这个定义了Web站点上可以访问该Cookie的目录
- Expires:这个值表示cookie的过期时间,也就是有效值,cookie在这个值之前都有效。
- Size:这个表示cookie的大小
cookie没有清除的方法,可以把时间设置成0,一生成就消失,似乎没啥用
(3)cookie能干啥?
cookie的首次访问和再次访问:
(1)首次访问,请求中没有cookie,服务器生成cookie,传给浏览器;
(2)第二次访问,请求中有cookie,把cookie以及其他发给服务器;
cookie的问题:
不安全:可以任意添加;可以被修改;
但是cookie可以从浏览器给服务器发送数据,既然可以发送数据,那就可以用这个数据做一些事情。
3.session是啥?
(1)从cookie到session
- 1.生成一个cookie ,name:JSESSIONID 值:6AC5747CDCF5C2E9788F0412AA904157
- 2.服务器上以值:6AC5747CDCF5C2E9788F0412AA904157:,指向服务器上的一块空间;
- 3.在这块存储空间中,可以使用session.setAttribute存储资源;
- 4.使用session.getAttribute() 获取资源
- 5.把这个Session发给前端
在Servlet中,在session空间中设置一个键值对
String username = req.getParameter("username");
// 获取session
HttpSession session = req.getSession();
// 设置一个键值对
session.setAttribute("username", username);
然后通过下面方式,拿到该键值对:
HttpSession session = req.getSession();
Object name = session.getAttribute("username");
System.out.println(name);
(2)设置session有效时间
在web.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app\_4\_0.xsd"
version="4.0">
<!-- 设置session的有效时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**