PHPSESSID是什么?

75

我正在研究 cookie。但是我没有名为 PHPSESSID 的 cookie。

我需要它吗?我能移除它吗?

它的“作用”是什么?

if (count($_POST)) {

setcookie("TestCookie", htmlspecialchars($_POST['val']), time()+3600);
}

print_r($_COOKIE);

打印:

Array
(
    [TestCookie] => blabla
    [PHPSESSID] => el4ukv0kqbvoirg7nkp4dncpk3
)

3
这只是PHP用于由session_start()生成的cookie的默认标识符。如果您想更改该名称,请使用ini_set('session_name','somethingElse') - caw
1
不要使用 ini_set('session.name', 'somethingElse');(注意点号),并且您必须在每个php页面上的session_start()之前使用它。(不仅仅是登录页面) - Tarik
使用session_name('somethingElse');(在每个页面上在调用session_start()或session_register()之前) - Tarik
7个回答

71

PHP使用两种方法来跟踪会话。如果启用了cookie(像您的情况),它将使用cookie。

如果禁用cookie,它将使用URL。虽然这样做可以安全地完成,但很难实现,并且通常并不可靠。例如,请参见session fixation

搜索一下,你会得到许多SEO建议。传统的智慧是你应该使用cookie,但PHP无论哪种方式都能跟踪会话。


374
我用谷歌搜了一下,这就是谷歌带我来的地方。 - Dustin Graham
8
不要使用URL作为会话ID!这是不安全的。 - Mark E. Haase
1
除了URL不好看之外,我认为与cookie相比,它并没有更少的安全性。一方面,我不认为从你身后观察的人会记住整个SESSION ID,另一方面,对于任何嗅探你连接或者可以访问你电脑的人来说,cookie并不难以阅读。 - Pax0r
29
Alice想要分享一些内容,所以她复制了URL并将其发送给Bob。Bob点击链接后,他现在以Alice的身份登录了。一个URL应该代表一个“资源”,而不是一个“状态”。在URL中嵌入状态始终是一个不好的想法。Cookie的引入是为了在无状态协议中实现状态保持。 - Mark E. Haase
1
@mehaase 好的,我理解你分享链接的观点。我只是想强调一下,cookie 也不安全。 - Pax0r

30

PHPSESSID显示您正在使用PHP。如果您不想让别人知道这一点,可以在您的php.ini文件中使用session.name或使用session_name()函数轻松更改名称。


39
超过80%的网站使用PHP,但这个信息并不实用。仅凭这个信息无法发现服务器的漏洞。 - Kalzem
35
这仍然是一种识别服务器当前正在运行的技术的方式,您可能希望或不希望透露这些信息。 - James Spittal
2
有更好的方法来识别技术。例如,这样的标头:X-Powered-By: PHP/7.2.15-0ubuntu0.18.04.1 - German Lashevich
3
@GermanLashevich 提到,在 PHP 的配置文件 php.ini 中,将 expose_php 设置为 off 可以禁用响应头中的 X-Powered-By 信息。另外,你也可以使用 header_remove("X-Powered-By"); 或者 header('X-Powered-By: Gerbils'); 来移除或自定义该信息。 - Brad Kent
@BradKent 当然,我并没有说暴露这些数据是不可避免的。我只是指出在安全上下文中需要关注更多的事情。 - German Lashevich

5

这是PHP中当前会话的标识符。如果您删除它,将无法访问/使用会话变量。建议您保留它。


你如何使用它获取会话变量? - user14525201
我一直在努力理解如何使用 phpsessid 访问会话值,但是我无法在任何地方找到它。不确定我的想法是否正确。 - user14525201

2

请检查php.ini文件中的自动会话ID。

如果启用它,您的cookie中将有PHPSESSID。


2

PHPSESSID是由服务器自动生成的会话cookie,其中包含服务器本身分配的随机长数字。


3
为了什么目的? - Dan Chase

0

在PHPv7.4和Microsoft Edge浏览器中使用cookie,只有在首次加载/初始化Web应用程序时才会生成PHPSESSID。如果我删除浏览器设置中的cookie(但保持Web应用程序选项卡打开),它会终止会话并强制我重新登录。但是,当我重新登录Web应用程序时,PHPSESSID cookie不会重新生成,但我的会话变量仍按预期工作。

我进行了这个测试,因为我有一个Web应用程序,在iframe中加载外部表单(来自另一个站点),当表单提交并重定向回我的Web应用程序(在iframe内)时,它会丢失iframe中的会话。删除PHPSESSID cookie解决了会话丢失的问题,但我不确定为什么cookie是问题所在(但这是另一个主题)。


-1
那是因为您正在加载一个不安全的Web应用程序(可能是HTTP),甚至可能有一些恶意软件想要在窃取您的Cookie后让您重新登录。这样它就可以生成一个新的Cookie来捕获您的信息。

您好,欢迎访问。请参加tour,以更好地了解社区规则。 - pierpy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接