热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端把cookie写在父域里_Java基础一文搞懂Session和Cookie的用法及区别

1.Session、Cookie是什么1.1概念理解要了解session和cookie是什么,先要了解以下几个概念。1.1.1无状态的HTTP协议协议:

1. Session、COOKIE是什么

1.1 概念理解

要了解session和COOKIE是什么,先要了解以下几个概念。

1.1.1 无状态的HTTP协议

协议:是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。

超文本传输协议(HTTP):是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

a54e9b231f824eda6c09f03658a3bb6d.png

1.1.2 会话(Session)跟踪

会话:指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Session与COOKIE。Session通过在服务器端记录信息确定用户身份,COOKIE通过在客户端记录信息确定用户身份。

1.2 COOKIE

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是COOKIE 的工作原理。

COOKIE实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个COOKIE。客户端会把COOKIE保存起来。

当浏览器再请求该网站时,浏览器把请求的网址连同该COOKIE一同提交给服务器。服务器检查该COOKIE,以此来辨认用户状态。服务器还可以根据需要修改COOKIE的内容。

1.2.1 会话COOKIE和持久COOKIE 若不设置过期时间,则表示这个COOKIE的生命期为浏览器会话期间,关闭浏览器窗口,COOKIE就消失。这种生命期为浏览器会话期的COOKIE被称为会话COOKIE。会话COOKIE一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。

若设置了过期时间,浏览器就会把COOKIE保存到硬盘上,关闭后再次打开浏览器,这些COOKIE仍然有效直到超过设定的过期时间。存储在硬盘上的COOKIE可以在浏览器的不同进程间共享。这种称为持久COOKIE。

1.2.2 COOKIE具有不可跨域名性

就是说,浏览器访问百度不会带上谷歌的COOKIE

1.3 Session

Session是另一种记录客户状态的机制,不同的是COOKIE保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。每个用户访问服务器都会建立一个session并自动分配一个SessionId,用于标识用户的唯一身份。

1.3.1 两个问题

1)如何在每次请求时都把SessionId自动带到服务器呢?

那就是COOKIE了,如果你想为用户建立一次会话,可以在用户授权成功时返回一个唯一的COOKIE。当一个用户再次发起请求时,浏览器会将用户的SessionId自动附加在HTTP头信息中(这是浏览器的自动功能,用户不会察觉到,开发人员也不需操作),当服务器处理完这个请求后,将结果返回给 SessionId 所对应的用户。

2)储存需要的信息。

服务器通过SessionId作为key,读写对应的value,这就达到了保持会话信息的目的。

1.3.2 Session的创建

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关

联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。

1.3.3 禁用COOKIE

如果客户端禁用了COOKIE,通常有两种方法实现session而不依赖COOKIE。

1)URL重写。就是把sessionId直接附加在URL路径的后面。

2)表单隐藏域。服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把sessionId传回服务器。

比如:

4、Session共享 对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.walking.com 和 bbb.walking.com),而SessionId又分别储存在各自的COOKIE中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改COOKIEs的域名为父域名达到COOKIE共享的目的,从而实现SessionId的共享(非服务器集群session共享)。带来的弊端就是,子站间的COOKIE信息也同时被共享了。

1.4 应用场景

登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是COOKIE。 session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。

2. 怎么操作Session

在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。在传统的java web开发,我们通过实现 javax.servlet.Servlet 接口或继承 javax.servlet.http.HttpServlet 来实现客户端和服务端以Http协议交互。

2.1 操作Session的API

对Session的操作如下:

@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpSession session = request.getSession(); session.setAttribute("userName



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
手机用户2502939543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有