Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话、cookies和id_Php_Session_Cookies_Login - Fatal编程技术网

Php 会话、cookies和id

Php 会话、cookies和id,php,session,cookies,login,Php,Session,Cookies,Login,有人建议我使用会话进行跨页存储,并通过将会话ID存储在GET参数或cookie中来维护会话ID 将数据保存到会话中并使其永久保存(如登录信息)最安全的方法是什么?我不确定我是否完全理解您的问题,但您可能混淆了两件事。禁用Cookie时,sidGET参数用作回退会话ID。GET参数和cookie都做同样的事情,但是在cookie中存储会话ID不会使URL混乱,这就是为什么这是首选方法 在PHP中使用$\u session存储会话数据时,数据仅在内部存储。它不会传输到用户的浏览器。只有包含会话ID的

有人建议我使用会话进行跨页存储,并通过将会话ID存储在GET参数或cookie中来维护会话ID


将数据保存到会话中并使其永久保存(如登录信息)最安全的方法是什么?

我不确定我是否完全理解您的问题,但您可能混淆了两件事。禁用Cookie时,
sid
GET参数用作回退会话ID。GET参数和cookie都做同样的事情,但是在cookie中存储会话ID不会使URL混乱,这就是为什么这是首选方法


在PHP中使用
$\u session
存储会话数据时,数据仅在内部存储。它不会传输到用户的浏览器。只有包含会话ID的cookie(或sid)才会离开服务器。

会话是PHP的标准功能。从开始阅读有关如何在PHP中处理会话的详细信息。无论如何,请注意,即使是会话也不是100%安全的。甚至会话也存在许多安全问题(您可以阅读一些关于会话的内容,以了解会话的安全含义)。

想象一个社区,用户发布链接和外部图像

为了使会话保持活动状态,页面使用GET而不是cookies

因此:用户观看外部图像或单击外部链接。 外部ressource的所有者现在可以读取REFERER,这样他就可以看到会话ID并劫持会话


这就是为什么大多数社区和类似页面在页面和外部ressource之间放置一个代理,如果会话ID是通过GET存储的,则它们会剥离会话ID。

cookie和会话之间的主要区别在于,会话数据存储在服务器端,而cookie数据存储在客户端。但由于在服务器和客户端之间发送敏感数据意味着严重的安全问题(数据篡改、窃听等),因此数据应该存储在服务器端

但是要将客户机与会话相关联,您需要某种标识符。这就是会话ID开始使用的地方。因为HTTP是独立的(即每个请求都是一个独立的事务,与以前的任何请求都无关),所以不存在仅通过其请求来识别客户机的本机方法

因此,您不需要将数据存储在客户端的cookie中并随每个请求一起发送,而只需将会话ID存储在客户端并随每个请求一起发送。这是一种更安全的方式,因为敏感数据不会通过网络发送。发送的只是会话ID(这里您可以使用URL或cookie)


但现在,由于会话ID是将客户端与会话关联的唯一信息,因此会话ID已成为某种需要保护的敏感数据。在这里,您需要某种方式来避免对会议的攻击。

我没有投反对票,但您不理解我的问题。我不想使用Cookie,因为它们不安全(可以很容易地编辑),所以我想(在内部)存储我的变量,但使会话的持续时间超过唯一的用途。@Charlie,但这正是会话的用途。cookie只是用来告诉哪个会话属于哪个用户。饼干是不安全的,但那没关系。您没有在其中存储任何敏感数据。您可以用示例进行解释吗?@Charlie not您可以假设,如果您遵循PHP的标准会话处理实践,它背后的基本机制(在cookie或sid参数中使用会话ID)是相当安全的。有一些陷阱(有关于它们的讨论,@ass3mbler链接到其中一些),但是会话处理(可能与SSL连接结合)通常是标准的方法。@Charlie:session使用cookie从所有当前会话中识别哪个会话是您的会话。以便会话不会发生冲突。他们将会话id存储在cookie中,当您请求访问网页时,他们会按浏览器上存储的会话id读取您当前的会话数据web上的任何内容都是100%安全的!所以基本上你想说的是:RTFM?不,我只是说你必须评估风险。在某些情况下,强加密cookie可能比普通会话更安全。您将在我链接的页面上找到详细的讨论,没有。我将检索会话id,并使其仅由首先必须登录的相关用户可用。会话将仅用于登录内容。。。我可能误解了你的答案。但要保持会话活动(让用户保持登录),你需要通过URL传输会话ID,这就是问题所在。如果用户转到包含外部内容的页面,则可以在外部服务器上检索会话ID,因为请求的URL通常作为HTTP\u REFERER在那里可用。如果有人伪造了一个cookie,如果他不知道一个有效的会话ID,那么什么也不会发生。问题是他是否知道一个有效的会话ID,如果您使用GET而不是cookies,这将更容易。“页面和外部资源之间的代理”?你在说什么?有这样一个社区的例子吗?例如,vbulletin在使用security-tokens重建会话管理之前就已经做了。做了什么?假设我下载了vbulletin代码并运行它。代理的位置在哪里?要使会话持续更长时间是不安全的。要回答您的问题,必须同时使用会话和cookie,每件事都是为了它的目的。不只是因为无知而试图从另一个会话中获取信息。会话的定义是有限的。因此,一个永远持续的会议不是一个会议。