Laravel中的Sessionid处理机制详解

发布时间 - 2026-01-11 03:12:27    点击率:

前言

本文主要给大家介绍了关于Laravel中Sessionid处理机制的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

在 Laravel 的配置文件 config/session.php 中可以设置 Session Cookie Name,比如这个项目中设置名称为“sns_session”:

/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
 
'cookie' => 'sns_session',

我们可以看到刷新页面,查看 cookie,会发现一个名称为 sns_session 的 cookie,名字就是我们自定义的。

这个 sessionid 就是 cookie 和 session 联系的桥梁,服务器通过这个 sessionid 判断来自哪个客户端的请求。

Laravel 的 sessionid 每次刷新发生变化

但是,每次刷新页面,这个 cookie 值都会发生改变!那么这样服务器如何保持会话呢?因为你的 sessionid 总是在变。

Laravel 对 cookie 进行加密

我们在 vendor/laravel/framework/src/Illuminate/Session/Store.php 的 save 方法中调试一下,打印一下这里的调用栈:

/**
 * {@inheritdoc}
 */
public function save()
{
 $this->addBagDataToSession();
 
 $this->ageFlashData();
 
 $this->handler->write($this->getId(), $this->prepareForStorage(serialize($this->attributes)));
 
 $this->started = false;
 
 dd(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,5));
}

每次刷新页面,这个 Store 对象的 id 属性其实是没有变化的,这个属性就是 sessionid 这个 cookie 的值。也就是说,sessionid 的值并不是每次发生变化,而是写 cookie 的时候,值发生了变化。

在 vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php 中的 encrypt 方法找到了原因,这个中间件对所有 cookie 值进行了加密处理,它被包含在 web 中间件。

protected function encrypt(Response $response)
{
 foreach ($response->headers->getCookies() as $cookie) {
 if ($this->isDisabled($cookie->getName())) {
  continue;
 }
 
 $response->headers->setCookie($this->duplicate(
  $cookie, $this->encrypter->encrypt($cookie->getValue())
 ));
 }
 return $response;
}

而这种加密方式是每次加密的结果都不同,所以表现为 sessionid 的值每次都发生了变化,而实际上并没有改变。在需要用到这个 cookie 的时候会被解密回去。

Laravel 框架这样设计的目的可能是为了防止 session 劫持吧!考虑还是比较全面的!

其他补充知识

原生 PHP 设置 session 名称

session_name() 函数:

<?php
 
/* 设置会话名称为 WebsiteID */
 
$previous_name = session_name("WebsiteID");
 
echo "The previous session name was $previous_name<br />";
?>

session_name() 函数返回当前会话名称。 如果指定 name 参数, session_name() 函数会更新会话名称, 并返回 原来的 会话名称。

请求开始的时候,会话名称会被重置并且存储到 session.name 配置项。 因此,要想设置会话名称,那么对于每个请求,都需要在 调用 session_start() 或者 session_register() 函数 之前调用 session_name() 函数。

COOKIE和SESSION的区别和关系

  • COOKIE保存在客户端,而SESSION则保存在服务器端
  • 从安全性来讲,SESSION的安全性更高
  • 从保存内容的类型的角度来讲,COOKIE只保存字符串(及能够自动转换成字符串)
  • 从保存内容的大小来看,COOKIE保存的内容是有限的,比较小,而SESSION基本上没有这个限制
  • 从性能的角度来讲,用SESSION的话,对服务器的压力会更大一些
  • SEEION依赖于COOKIE,但如果禁用COOKIE,也可以通过url传递

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# laravel  # sessionid  # laravel获取sessionid  # 教程  # 跟我学Laravel之请求(Request)的生命周期  # 三个思路解决laravel上传文件报错:413 Request Entity Too Large问题  # Laravel学习教程之request validation的编写  # 跟我学Laravel之视图 & Response  # 关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析  # Laravel5.2使用Captcha生成验证码实现登录(session巨坑)  # laravel获取不到session的三种解决办法【推荐】  # Laravel如何使用Redis共享Session  # Laravel 5.4.36中session没有保存成功问题的解决  # Laravel框架Request、Response及Session操作示例  # 客户端  # 发生了  # 是在  # 相关内容  # 说了  # 不多  # 更大  # 有一定  # 可以通过  # 要想  # 更高  # 给大家  # 可以看到  # 自定义  # 这篇文章  # 较小  # 每次都  # 谢谢大家  # 表现为  # 转换成 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 智能起名网站制作软件有哪些,制作logo的软件?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  香港网站服务器数量如何影响SEO优化效果?  浅述节点的创建及常见功能的实现  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何破解联通资金短缺导致的基站建设难题?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在云服务器上快速搭建个人网站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  制作电商网页,电商供应链怎么做?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何在万网自助建站中设置域名及备案?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在万网自助建站平台快速创建网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何为不同团队 ID 动态生成多个非值班状态按钮  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何快速搭建自助建站会员专属系统?  如何用虚拟主机快速搭建网站?详细步骤解析  香港服务器网站推广:SEO优化与外贸独立站搭建策略  简历在线制作网站免费版,如何创建个人简历?  Android使用GridView实现日历的简单功能  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何在宝塔面板中修改默认建站目录?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Java垃圾回收器的方法和原理总结  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  无锡营销型网站制作公司,无锡网选车牌流程?  黑客入侵网站服务器的常见手法有哪些?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何快速搭建个人网站并优化SEO?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  ,在苏州找工作,上哪个网站比较好?  青岛网站建设如何选择本地服务器?