当前位置: 首页 > 面试题库 >

PHP会话如何工作?(不是“如何使用?”)

关翰
2023-03-14
问题内容

会话文件通常存储在(例如)/tmp/服务器上,并命名为sess_{session_id}。我一直在查看内容,但无法弄清楚它们是如何工作的。

从文件中获取变量名称和内容很容易。但是PHP如何知道哪个会话属于谁?

session_id似乎是完全随机的,一个IP地址可以有多个用户,并且每个用户打开多个浏览器窗口时可以有多个会话。

那么它是怎样工作的?


问题答案:

在一般情况下:

  • 会话ID在用户创建会话后发送给用户。
  • 它存储在cookie中(默认情况下称为PHPSESSID
  • 该Cookie由浏览器随每个请求发送到服务器
  • 服务器(PHP)使用包含session_id的cookie来知道哪个文件对应于该用户。

会话文件中的数据是被$_SESSION序列化的内容 (即表示为字符串-具有诸如
serialize
的功能)
;并且在PHP加载文件时未序列化以填充$_SESSION数组

有时,会话ID不会存储在Cookie中,而是也会通过URL发送-但这在当今非常罕见。



 类似资料:
  • 问题内容: 所以我试图让Session在我的socket.on(’connection’,…)内部工作,我试图使用最新版本进行工作:Socket.io-0.9.13,Express-3.1.0和最新版本其他模块。 无论如何,我都尝试过使用两个模块’ connect-redis ‘和’ session.socket.io ‘,它们都有类似的问题。 在我的代码中,我有2个redis存储(socketi

  • 我是使用会话变量的新手,尽管我在网上搜索了解会话变量,但我一直在苦苦挣扎。 所以基本上我有一个页面(search.php)。我加载一个基于搜索表单的动态数据表。加载表后,我通过AJAX执行以下操作: 正如您在Success和单击table row记录时所看到的,我的想法是通过AJAX发布一个变量以供以后使用。并将用户重定向到update.php页面。 然后,我希望使用发布的AJAX变量在sessi

  • 问题内容: 使用Express.js,会话非常简单。我很好奇它们实际上是如何工作的。 它在客户端上存储一些cookie吗?如果是这样,我在哪里可以找到该Cookie?如果需要,如何解码? 我基本上希望能够查看用户是否已登录,即使当时用户实际上不在该站点上(例如,当您在其他站点上时,facebook如何知道您已登录)。但是我想了解的是,我应该首先了解会议的工作方式。 问题答案: 我从未使用过Expr

  • 问题内容: 我刚刚有了Hibernate Session和Connection之间的关系。但是现在,我又遇到一个问题:hibernate会话工厂如何管理会话?在以下代码段中:DAO类的save()方法: 当我们调用时,它将创建一个新会话(通过ThreadLocal附加到当前线程),该会话也附加到JDBC连接。但是,正如您所看到的,我们不需要关闭该会话(会话。 close()),都没有连接。那么,H

  • 我一直在尝试建立一个PHP网站。不管我怎么努力,我都无法让gettext开始工作。 我正在运行一个ubuntu apache服务器上的流浪框,我需要的所有区域设置都是可用的和生成的(使用区域设置-a检查)。 已安装并启用Gettext(使用phpinfo()检查) 这是我的PHP: 这是我的/vagrant/build/locale/en_US/LC_MESSAGES/en_US。采购订单文件:

  • 问题内容: 如何调用会话对象,检查会话是一个新会话还是已在使用中? 我读到,如果客户端尚未使用会话ID进行响应,则返回true。但是这是什么意思 ?请解释 问题答案: 我读到,如果客户端尚未使用会话ID进行响应,则isNew()返回true。但是这是什么意思 ? 考虑服务器当前正在处理请求。关于会话处理,有两种方案。 在新的会话方案中,服务器正在为用户/客户端创建一个新的会话。(客户端可能未在请求