当前位置: 首页> 教育> 就业 > 成都网站制作网站_河南彩灯制作公司_杭州最好的seo公司_广州网站建设推荐

成都网站制作网站_河南彩灯制作公司_杭州最好的seo公司_广州网站建设推荐

时间:2025/7/11 23:28:51来源:https://blog.csdn.net/2303_80236475/article/details/145801931 浏览次数:0次
成都网站制作网站_河南彩灯制作公司_杭州最好的seo公司_广州网站建设推荐

Cookie

1,Cookie 是什么?

Cookie 是在 Web 服务器和浏览器之间传递的小段数据。当用户访问支持 Cookie 的网站时,服务器会发送一些数据到用户的浏览器,浏览器将这些数据以文件形式存储在本地。后续,浏览器在向同一服务器发送请求时,会把这些存储的 Cookie 数据一并发送回服务器,从而实现服务器与浏览器之间的信息交互和状态跟踪。

2,为什么要使用 Cookie?解决了什么问题 ?

HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。

  • 实现会话跟踪:HTTP 协议是无状态的,服务器无法识别来自同一用户的不同请求。通过使用 Cookie,服务器可以为每个用户分配一个唯一标识(如 Session ID),并将其存储在 Cookie 中。在后续请求中,服务器根据 Cookie 中的标识识别用户,实现会话的连续性,例如记住用户的登录状态。
  • 个性化设置:网站可以根据用户的偏好设置(如语言、主题等)创建 Cookie。当用户再次访问网站时,服务器读取这些 Cookie,为用户提供个性化的服务,提升用户体验。
  • 记录用户行为:网站可以使用 Cookie 记录用户的浏览历史、搜索记录等行为信息。基于这些数据,网站可以进行精准的广告投放、内容推荐等。

3,Cookie 什么时候产生 ?

服务器主动创建:当用户首次访问网站时,服务器可以通过响应头(Set - Cookie)向浏览器发送 Cookie。例如,在 Java Web 开发中,使用 response.addCookie() 方法可以创建并发送 Cookie 到客户端浏览器。

4,Cookie 的生存周期?

Cookie 的生存周期分为两种类型:

  • 会话 Cookie:也称为临时 Cookie,这种 Cookie 没有设置过期时间(ExpiresMax - Age),它仅在当前浏览器会话期间有效。当用户关闭浏览器时,会话 Cookie 会被自动删除。
  • 持久 Cookie:通过设置 ExpiresMax - Age 属性来指定 Cookie 的过期时间。Expires 是一个具体的日期和时间,当到达该时间时,Cookie 会被浏览器自动删除;Max - Age 是一个以秒为单位的相对时间,从创建 Cookie 开始计算,经过指定的秒数后,Cookie 过期。例如,设置 Max - Age 为 3600 表示 Cookie 将在 1 小时后过期。

5,Cookie 有哪些缺陷 ?

  • 安全性问题
    • 信息泄露:Cookie 以明文形式存储在客户端浏览器中,容易被恶意用户获取,从而导致用户信息泄露。例如,用户的登录凭证、个人信息等可能会被窃取。
    • 跨站脚本攻击(XSS):攻击者可以通过在网页中注入恶意脚本,获取用户的 Cookie 信息,进而冒充用户进行操作。
    • 跨站请求伪造(CSRF):攻击者可以诱导用户在已登录的网站上执行恶意请求,利用用户的 Cookie 信息完成非法操作。
  • 存储容量限制:每个 Cookie 的大小通常限制在 4KB 左右,并且浏览器对每个域名下的 Cookie 数量也有限制,一般为 20 个左右。这对于需要存储大量信息的场景来说是一个明显的限制。
  • 用户隐私问题:一些网站滥用 Cookie 收集用户的个人信息,这可能会侵犯用户的隐私。部分用户可能会因为担心隐私问题而选择禁用 Cookie,从而影响网站的正常使用。

代码

添加一个最后一次访问时间的cookie,第一次访问时是null。

如果没有cookie.setMaxAge(60);默认值为-1,即关闭浏览器就会消失。

setMaxAge()单位为秒。

public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");resp.setCharacterEncoding("UTF-8");PrintWriter out = resp.getWriter();//获取CookieCookie[] cookies = req.getCookies();if(cookies == null) out.println("没有Cookie");for (Cookie cookie : cookies) {if(cookie.getName().equals("lastTime")){long lastTime = Long.parseLong(cookie.getValue());Date date = new Date(lastTime);out.println("上次访问时间:" + date);}}Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");cookie.setMaxAge(60);resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

Session

1,Web 中什么是会话?

在 Web 应用程序里,会话指的是一个客户端(通常是浏览器)与服务器之间从建立连接开始,到连接断开结束的整个交互过程。这个过程包含了客户端向服务器发送多个请求,服务器针对这些请求给出相应响应的一系列操作。

2,什么是 Session?

Session(会话)是服务器端用于跟踪和管理客户端会话状态的一种机制。服务器会为每个与它建立会话的客户端创建一个唯一的 Session 对象,并给这个对象分配一个独一无二的 Session ID。这个 Session ID 一般会通过 Cookie 或者 URL 重写的方式传递给客户端。客户端在后续的请求中把 Session ID 传回服务器,服务器依据这个 ID 就能识别出是哪个客户端发起的请求,进而获取该客户端对应的 Session 对象,从中获取和存储与该客户端相关的状态信息。

以网上银行系统为例,当你登录成功后,服务器会创建一个 Session 对象来保存你的登录状态、账户信息等。在你进行转账、查询余额等操作时,服务器通过 Session ID 找到对应的 Session 对象,确认你的身份和权限,确保操作的安全性和准确性。

一个浏览器一个session ID,即一个会话,一个Session对象。、

3,Session 的生命周期

Session 的生命周期包含创建、使用和销毁三个阶段:

  • 创建阶段:如前面所述,当调用 getSession(true) 方法或者满足 Web 容器默认创建条件时,服务器会为客户端创建一个新的 Session 对象,并生成一个唯一的 Session ID。

  • 使用阶段:在 Session 创建之后,服务器和客户端之间的交互过程中都可以使用这个 Session。开发者可以使用 HttpSession 对象的 setAttribute() 方法往 Session 中存储数据,使用 getAttribute() 方法从 Session 中获取数据。

  • 销毁阶段

    Session 可以通过以下几种方式销毁:

    • 会话超时:服务器会为每个 Session 设置一个超时时间(可以在 web.xml 文件中配置,也可以使用 HttpSession 对象的 setMaxInactiveInterval() 方法设置)。如果在指定的时间内没有任何请求,服务器会自动销毁该 Session。
    • 手动销毁:可以通过调用 HttpSession 对象的 invalidate() 方法来手动销毁 Session。比如在用户执行注销操作时,通常会调用该方法。
    • 服务器关闭:当服务器关闭时,所有的 Session 对象都会被销毁。

代码

public class SessionServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");req.setCharacterEncoding("UTF-8");PrintWriter out = resp.getWriter();HttpSession session = req.getSession();session.setAttribute("name", "luxiya");String id = session.getId();if(session.isNew()){out.println("session创建了"+id);out.println(session.getAttribute("name"));}else{out.println("session存在"+id);out.println(session.getAttribute("name"));}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}public class RemoveServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("name");session.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
public class GetAttributeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();PrintWriter  out = resp.getWriter();resp.setContentType("text/html;charset=UTF-8");req.setCharacterEncoding("UTF-8");if(session.getAttribute("name")!=null){out.println("name:"+session.getAttribute("name")+"<br>");}else{out.println("name is null<br>");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}<session-config><session-timeout>1</session-timeout></session-config>

总结&问题

q:如果是session,服务器会生成一个sessionID放在cookie中发给浏览器,浏览器会保存这个cookie,那么我们可以从浏览器中看到这个cookie吗,如果可以岂不是也能看到sessionID吗,这样不也是不安全吗

a:很多情况下,返回的sessionID是经过加密得,在通过cookie返回到服务器的时候,会通过密钥解密,如果和服务器里Session库中解密得到的值不一样,就说明被篡改过;而且,一般sessionID是有时效性得,过时了服务器会清理减少压力,因此客户端也需要再次通过cookie获取新的会话Id,其安全性还是挺好的。

注意点:

①Cookie可以存储在浏览器或者本地,Session只能存在服务器
②session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
③Session比Cookie更具有安全性(Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击)
④Session占用服务器性能,Session过多,增加服务器压力
⑤单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie,Session是没有大小限制和服务器的内存大小有关。

关键字:成都网站制作网站_河南彩灯制作公司_杭州最好的seo公司_广州网站建设推荐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: