当前位置:网站首页>cookie、session的配置和使用
cookie、session的配置和使用
2022-07-17 05:22:00 【INSIGNER】
1 cookie
1.1 什么是cookie
- 就是一个键值对用来存储少量的数据的字符串。
- 存在于客户的电脑上,每个客户向服务发送请求都会发送这个 cookie
- 可以使用 js 和 jquery 设置和读取cookie
1.2 读取和设置cookie
1.2.1 前端
<script> // 函数中的参数分别为 cookie 的名称、值以及过期天数 function setCookie(c_name,value,expiredays){
var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) } setCookie('name','zzyn',1); // cookie过期时间为1天。 </script>
读取 cookie
// 函数中的参数为 要获取的cookie键的名称。
function getCookie(c_name){
if (document.cookie.length>0){
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1){
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1){
c_end=document.cookie.length;
}
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
var uname= getCookie('name');
1.2.2 后端
如何创建cookie

浏览器给服务器发送请求时,如果浏览器中储存的有服务器发送的cookie值,就会将cookie值作为请求得一部分发送给服务器,没有就算了。而服务器方面,每次至少会有一个 cookie 被发送(就是session 会话的值),而在此基础上,后端程序员也可以修改cookie的值,或者添加新的 cookie 键值对。
之后服务器就会通过响应将 cookie 发送给浏览器,并被浏览器储存,至于时间由可以在服务器创建时,当然可以设置的不只时间,还有允许的路径。
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 创建 Cookie 对象
Cookie cookie = new Cookie("key4", "value4");
//2 通知客户端保存
Cookie resp.addCookie(cookie);
//1 创建 Cookie 对象
Cookie cookie1 = new Cookie("key5", "value5");
//2 通知客户端保存
Cookie resp.addCookie(cookie1);
resp.getWriter().write("Cookie 创建成功");
}
**注意:**这里createCookie的方法并不是servlet接口自带的,而是通过在doGet和doPost方法中通过前后端约定好的 action参数,通过反射实现方法的调用。代码如下
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
try {
// 获取action业务鉴别字符串,获取相应的业务 方法反射对象
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
// 调用目标业务 方法
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
这样调用方法,可以保证代码具有较高的可读性,虽然后面基本不会使用到这样的技巧
如何获得cookie
浏览器向客户端发送请求时就会向服务器发送 cookie,服务器也可以通过cookie值进行一些对应的操作。
为了保证代码的可重用,可以单独将判断的过程写到工具类当中。
public class CookieUtils {
/** * 查找指定名称的 Cookie 对象 * @param name * @param cookies * @return */
public static Cookie findCookie(String name , Cookie[] cookies)
{
if (name == null || cookies == null || cookies.length == 0) {
return null;
}
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
}
return null;
}
}
Servlet实现代码:
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
// getName 方法返回 Cookie 的 key(名)
// getValue 方法返回 Cookie 的 value 值
resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br/>");
}
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
//判断是否为空,并调用,上面写的方法
if (iWantCookie != null) {
resp.getWriter().write("找到了需要的 Cookie");
}
}
如何修改cookie
方法一:创建新的 cookie 替代旧的 cookie
// 1、先创建一个要修改的同名的 Cookie 对象
// 2、在构造器,同时赋于新的 Cookie 值。
Cookie cookie = new Cookie("key1","newValue1");
// 3、调用 response.addCookie( Cookie ); 通知 客户端 保存修改
resp.addCookie(cookie);
方法二:直接修改原来的 cookie 并响应个原来的方法。
// 1、先查找到需要修改的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
if (cookie != null) {
// 2、调用 setValue()方法赋于新的 Cookie 值。
cookie.setValue("newValue2");
// 3、调用 response.addCookie()通知客户端保存修改
resp.addCookie(cookie);
}
如何查看浏览器中的 cookie
按下 F12 就可弹出,一下窗口,这是edge,不同的浏览器会有不同的工作区会有不同的名字,具体情况具体分析。
如何设置cookie的生命周期
cookie的生命周期是真正的时间
可以使用 setMaxAge(long time);以秒为单位。
- 如果time是正数表示,则默认为指定关闭的秒数。
- 如果是负数,表示关闭浏览器自动清理 cookie,默认为 -1
- 0 马上删除cookie
/** * 设置存活 1 个小时的 Cooie * @param req * @param resp * @throws ServletException * @throws IOException */
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("life3600", "life3600");
// 设置 Cookie 一小时之后被删除。无效
cookie.setMaxAge(60 * 60);
resp.addCookie(cookie);
resp.getWriter().write("已经创建了一个存活一小时的 Cookie");
}
设置 cookie 的有效路径
这样设置的目的是为了,保证,cookie 只有在特定路径下才可以被浏览器使用,以防止出现不必要的麻烦。起过滤作用
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送
路径默认为是项目的工程路径
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("path1", "path1");
// getContextPath() ===>>>> 得到工程路径
cookie.setPath( req.getContextPath() + "/abc" );
// ===>>>> /工程路径/abc
resp.addCookie(cookie);
resp.getWriter().write("创建了一个带有 Path 路径的 Cookie");
}
2 Session 会话
2.1 概念
- 代码表现是 Session 就是一个接口
- Session 用来维护客户端和服务器之间的一种关联
- 每个客户端都有一个会话,存储在服务器中。
- 常用来保存用户登录之后的信息。
2.2 创建和获取Session
创建和获取写在一起,是因为这两个使用同一个方法。Session request.getSession()
第一次调用:创建Session
之后就是获取boolean session.isNew()判断是否是新创建出来的。
true 是刚创建
false 不是刚创建
- 向Session中设置数据
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置 Session 中的数据为 key1-value1
HttpSession session = req.getSession().setAttribute("key1", "value1");
//查看默认超时时长
int time = session.getMaxInactiveInterval();
//设置超时时长
session.setMaxInactiveInterval(3);//以秒为单位,此为3秒
//让session 马上超时
//session.inValidate();
//获得 session 中存储的数据
session.getAttribute("key1");
resp.getWriter().write("已经往Session中保存了数据");
}
除了以上获得的数据还有一个就是 Session 的id,每一个Session 都有一个独一无二的 ID ,而通过cookie行浏览器呈递的就是这个cookie。
tomcat 默认session的超时时长为 30 秒。如果想修改,可以在 tomcat 服务器下的 web.xml 文件中配置。
<session-config>
<session-timeout>20</session-timeout>
</session-config>

边栏推荐
- 快速学会cut命令,uniq命令的使用
- What is tsd/qsd? What is CS Genesis SD NAND?
- What happened to redraiment
- 文本三劍客之awk命令--截取
- Performance evaluation and comparison of Huawei cloud Kunpeng arm ECs and x86 ECS
- 传奇怎么开服?开传奇私服需要准备什么呢?
- Total price contract, cost compensation contract, labor contract
- 【自动化测试】——robotframework实战(三)编写测试用例
- SSH remote login service
- 个人信息管理系统
猜你喜欢
随机推荐
Intranet penetration server building tutorial, NPs use tutorial
SSH remote login service
Gnome 安装扩展插件(40.1版本,opensuse tumbleweed)。
Weight matching (greedy)
传奇手游怎么开服?需要投资多少?需要那些东西?
Manual string comparison (pointer question)
关于文件上传下载问题
Tower of Hanoi 2 (function)
Postage range (array or + function)
Freebsd 12 安装RPM包
我的世界1.12.2 神奇宝贝(精灵宝可梦) 开服教程
Common user password encryption methods and cracking methods
Xiaodi network security - Notes (4)
天翼云 杭州 云主机(VPS) 性能评测
Minecraft bedrock BDS service tutorial
IP fragment是什么意思?如何防御IP fragment攻击?
小迪网络安全笔记-信息收集-架构、搭建、waf(8)
渊子赛马。
小迪网络安全笔记 信息收集-CDN绕过技术(7)
阿里云、腾讯云、华为云、Ucloud(优刻得)、天翼云 的云服务器性能测试和价格对比







![[ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :](/img/dd/054af819c8bdca31bd135495386fb4.png)
