会话由两个组件构成,即客户端会话ID和服务端会话数据。客户端可以将会话ID作为URL参数、cookie或甚至HTTP头信息发送到服务器。
然后,服务器使用此会话ID查找适当的会话数据并返回给客户端。
您可以通过各种session_
函数来调整会话行为。
会话是服务器端会话数据和客户端cookie的组合,其中客户端cookie仅包含对服务器上正确数据的引用。因此,当用户访问网站时,其浏览器向服务器发送引用代码,服务器加载相应的数据。
这种方法可能比使用客户端cookie存储所有数据更加麻烦,但有几个优点:
还要注意的是,会话仅在用户关闭浏览器之前持续存在,而cookie可以配置为持续更长时间。然而,除上述之外,在大多数情况下,会话数据和cookie数据没有太大区别。
这篇文章非常好地解释了PHP中会话和cookie的工作原理。
PHPSESSID
GET变量。 - alextmp
文件夹的人也可以操作它(比如共享主机)。更改会话保存路径http://php.net/manual/en/function.session-save-path.php是个好主意。 - alex会话非常简单。
当我登录您的网站时,PHP将使用“会话ID”设置标准浏览器cookie,通常是类似于63f1a67cf52b5d2bbd0cbef45e18b242
的字母数字字符串。
与所有 cookie 一样,我的浏览器将在每个请求中向您的服务器发送该cookie。因此,您的应用程序现在知道,带有63f1a67cf52b5d2bbd0cbef45e18b242
会话ID的每个请求都来自于我。
因此,如果您需要存储有关我的任何信息,可以在63f1a67cf52b5d2bbd0cbef45e18b242
下进行跟踪。默认情况下,PHP将此信息存储在/tmp/
目录中的文件中,但您可以覆盖它并将其存储在任何地方(例如,在数据库中)。重要的是将会话ID与特定用户相关联。
我不想过于简化事物。存在一些问题(例如,如果入侵者看到了未加密的会话ID并开始使用它本人,他可能会开始冒充我),并且有一些方法可以缓解这些问题。但是,将会话ID存储在cookie中并使用该ID来识别存储在服务器上关于我的信息的基本机制是相当普遍的。
我认为Gmail使用的是Python而不是PHP。
PHP默认将其会话写入/tmp
目录。可以将其配置为在数据库中存储会话。
它通过cookie标识会话,但也可以配置为传递查询字符串,但这样做很丑陋。
PHP会话的工作原理是什么
首先,PHP会为每个会话创建一个唯一的标识符(32个十六进制数字的随机字符串,例如3c7foj34c3jj973hjkop2fc937e3443)。
PHPSESSID cookie将该唯一标识号传递给用户的浏览器,以保存该编号。
服务器上创建了一个新文件,该文件名与唯一标识号相同,并带有sess_前缀(即sess_3c7foj34c3jj973hjkop2fc937e3443)。
Web浏览器将cookie随每个请求发送到服务器。
如果PHP从PHPSESSID cookie中获取到该唯一标识号(在每个请求中),那么PHP会搜索临时目录并比较该数字和文件名。 如果两者相同,则检索现有会话,否则为该用户创建一个新会话。
当用户关闭浏览器或离开网站时,会话终止。 服务器还会在预定的会话时间结束后终止会话。 这些是PHP处理会话所使用的简单机制。 希望本文可以帮助您了解PHP SESSION的工作原理。
有关更多详细信息,请参见此文章。 PHP会话的工作原理是什么
在header顶部定义session_start()函数...这将生成一个唯一的编号。Session是与服务器通信的方式。Session存储在服务器端和客户端。浏览器将会话存储在tmp文件或cookie中。
Cookie保留会话名称和值,但不保存会话数据。数据由服务器端的session保存。当客户端向服务器发送请求时...服务器获取会话ID并将数据返回给客户端。Session ID是由服务器端生成的标识请求来源的方式。
session_start()函数会生成一个随机的会话ID,并将其存储在用户计算机上的cookie中(这是实际存储在客户端的唯一会话信息)。默认的cookie名称是PHPSESSID,尽管在服务器上的PHP配置文件中可以更改此名称(大多数托管公司通常不会更改它)。要在您的PHP代码中引用会话ID,您需要引用变量$PHPSESSID(它是一个cookie名称;还记得Cookies吗?) 聪明的你可能想知道当您第二次通过页面并到达session_start()函数时会发生什么。PHP知道已经存在一个会话,因此会忽略后续的session_start()函数。