【问题标题】:Is it possible to change a $_SESSION variable client-side? [duplicate]是否可以在客户端更改 $_SESSION 变量? [复制]
【发布时间】:2011-10-18 05:45:45
【问题描述】:

可能重复:
PHP Can a client ever set $_SESSION variables?

我想知道的是,PHP $_SESSION 变量是否可以在客户端更改。例如,如果我做$_SESSION['username'] = $username; 有人可以以某种方式更改我的$_SESSION['username'] 变量的值吗?

【问题讨论】:

  • php - 服务器端脚本

标签: php session client-side


【解决方案1】:

SESSION 超全局的内容不能更改。这存在于服务器上,客户端无法访问它。

但是,会话 id 会传递给客户端,这样当客户端与服务器联系时,服务器就知道要使用哪个会话。 此值可以更改(请参阅 Calums 答案以防止这种情况有关信息,请参阅 http://php.net/manual/en/session.security.php)。这将允许用户使用其他人的会话(但不会更改会话的值)。

【讨论】:

  • 所以使用某人的PHPSESSID,有人可以劫持他们的会话,但不可能改变SESSION数组的内容?
  • @George 正确,请参阅 Calums 防止劫持的答案。
  • @Jim 这个著名的 Calum 的答案在哪里?
  • @carla Calum 的回答仅因链接而被删除。我已将适当的链接添加到我的答案中。
【解决方案2】:

PHP 是一种服务器端编程语言,$_SESSION 超全局变量只能在服务器上直接访问。使用“正常”的 php 会话,包含在 ESSSON 超全局中的数据在 cookie 中在浏览器和服务器之间来回传递。因此从技术上讲,可以通过修改 cookie 在网络浏览器中使用 Javascript 修改会话。

但请注意,任何尝试做这样的事情都可能是一个糟糕的想法,而且很可能有一种更简单的方法来完成你想要做的任何事情。

编辑:我问的这个问题可能对你有用 Codeigniter/PHP sessions security question

【讨论】:

  • 修改 cookie 不会让您更改会话超全局的值,但可以让您使用另一个会话(前提是您猜到了正确的会话 ID)。
  • 我关心的是用户是否能够更改此变量,以及如何保护它。
  • 可行,不简单。我试图回答以下问题:是否可能。这是个好主意吗?没有。
  • @George Korac:是的。用户可以更改变量,因此如果您使用的是普通 PHP 会话 - 不,您不能信任用户的输入。解决此问题的一种方法是使用数据库进行会话存储。数据库存储用户的会话变量,并且只有一个标识符在 Web 浏览器和服务器之间来回传递。使用 codeigniter PHP 框架很容易实现。
  • 既然有可能,我应该保护我的 php 脚本的哪些部分,以及如何保护?还是与我的php无关?我已经过滤了所有用户输入,但我想知道他们是否可以使用脚本等来更改该值..
【解决方案3】:

不完全是,但您可以使用 AJAX 模拟它。只需编写一个更改值的php文件,然后从AJAX调用它,只需执行它并更改该值即可。

希望对你有所帮助。

【讨论】:

  • 这个我已经很熟悉了,因为我已经使用了很长时间了,但是我关心的是用户是否能够更改这个变量...
  • 好的,我想这就是我的做法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多