Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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中的Cookie对象_Php - Fatal编程技术网

PHP中的Cookie对象

PHP中的Cookie对象,php,Php,我开始学习PHP,但我在应用程序方面遇到了问题: 我需要在PHP中为一个cookie输入一个对象的信息,然后在另一个页面上再次接收一个cookie。 有人能解决这个问题吗 我想存储在cookie中的信息只是一些信息,比如背景颜色、窗口大小 <?php class Client { private $id; private $pSize; private $color; function __construct($id) { $this->id = $i

我开始学习PHP,但我在应用程序方面遇到了问题: 我需要在PHP中为一个cookie输入一个对象的信息,然后在另一个页面上再次接收一个cookie。 有人能解决这个问题吗

我想存储在cookie中的信息只是一些信息,比如背景颜色、窗口大小

<?php  
class Client {    

private $id;
private $pSize;    
private $color;

function __construct($id) {
    $this->id = $id;
}

public function getPSize() {
    return $this->pSize;
}

public function setPSize($pSize) {
    $this->pSize = $pSize;
}

public function getColor() {
    return $this->color;
}

public function setColor($color) {
    $this->color = $color;
}
}
?> 
我解决了这个问题。感谢所有帮助过我的人。 之前,我尝试只获取cookie信息而不序列化 伙计们,这是我的第一篇帖子,如果我做错了什么,我道歉。
我必须为您做些补偿?

您可以通过序列化、取消序列化以字符串形式存储对象(就像cookie那样)

setcookie ($name, serialize($object));   // set object

$object = unserialize($_COOKIE[$name]);   // get object
但请记住,使用这种方法可能是危险的

您可以使用
json
而不是
serialization
来存储
stdClass
,这样就足够安全了

setcookie ($name, json_encode($object));   // set object stdClass

$object = json_decode($_COOKIE[$name]);   // get object stdClass
但它更喜欢用来存储数据。您甚至可以不调用serialize、unserialize来存储对象。但是
\u睡眠
\u唤醒
魔法仍然有效


,,.

要发送序列化对象,必须使用指定的东西,如
time()
来绕过
垃圾邮件
并控制
超时

session_start();  

setcookie('myobject',serialize("Myvalue"),(time()+(3600*24*30)));
确保存储在会话中:

     unset($_SESSION['myobject']);
存储您的对象

     $_SESSION['myobject'] = unserialize($_COOKIE['myobject']);
恢复您的Obecjt:

$mySeriaLizedObject = $_SESSION['myobject'];

这听起来不仅仅是一个会话功能。您不应该通过Cookie传输数据。在Cookies中,您只保存简短的信息,如会话令牌、哈希或某些设置。要传输和保存数据,PHP会话函数要好得多

在会话中,如果需要或仅保存数组或值,可以序列化某些数据

session_start(); // on every page

$_SESSION['test'] = "123123";

echo $_SESSION['test'];

答案是:你没有。

无论何时从客户端获取数据并在代码中使用, 您必须实现安全性,以防止用户更改其客户端数据并向服务器中注入意外内容时发生这种情况。客户端很容易伪造和更改cookie数据,从而更改对象

例如:

如果我们从Alma Do的答案序列化对象并将值存储在cookie中,那么客户机/用户可以从

public function __sleep() {
    return array('server', 'username', 'password', 'db');
}
客户机现在可以将其cookie更改为使用假服务器而不是您的服务器,伪造您的登录/用户表并假装是管理员


我认为这是一种情况,请让我们知道您的目标到底是什么。

您是否尝试过使用会话?查看编辑的答案,也许您知道序列化的作用是什么您有足够的答案来存储任何对象。现在我们必须问你们:你们试过什么?OP并没有提到课程。可能只是关于cookie数据传输的问题。可能是“我开始学习PHP”,但这听起来有点像一个全球性的解决方案?当你点击向下箭头时,你读过bleu sky中的段落了吗?这相当于将私有数据存储在cookie中的对象中,或者仅存储在cookie中。这没有任何意义。我能把这个答案提高50次吗?尽管我会将答案改为“你永远不会,永远不会,永远不会这样做”,但千万不要在cookie中存储序列化对象。“这太危险了。”凯文施罗德,答案包括关于这个问题的相关链接。是的,我看到了。然而,这不仅仅是“可能危险”或“不受欢迎”。作为一种模式,这是极其危险的。如果这个标签有任何理由的话,那就是围绕着“在现实生活中永远不要这样做”这几个字。
session_start(); // on every page

$_SESSION['test'] = "123123";

echo $_SESSION['test'];
public function __sleep() {
    return array('server', 'username', 'password', 'db');
}