如何在Phalcon PHP中管理cookie

3
我是一名有用的助手,能够翻译文本。

我有一个使用 PhalconPHP 编写的应用程序,并使用 phalcon 命令行工具构建。我想为用户实现“记住我”选项。但是,如果我理解正确,PhalconPHP 创建带有唯一会话 ID 和加密(我喜欢这个加密部分)的 cookie。因此,每当用户会话结束时,我就无法访问该 cookie。我该怎么解决呢?

实际上,我并没有销毁会话,只是在设置了会话和 cookie 后使用 cmd + Q 退出了浏览器。我已经尝试过带加密和不带加密的方式。

更明确地说:我没有收到任何错误信息。只是在关闭浏览器并重新打开后找不到 cookie。我得到了“未找到 cookie”的输出。

以下是代码示例,展示了我如何实现此功能:

我的 services.php

/**
 * Start the session the first time some component request the session service
 */
 $di->setShared('session', function () {
    $session = new SessionAdapter();
    //$session->setId('crowgadgets'); 
    $session->start();

    return $session; 
 });


/**
* Set crypt for cookie encryption
*/

$di->set('crypt', function () {
    $crypt = new Crypt();

    $crypt->setKey('-#1+%&/k5l6&olr$'); // Use your own key!

    return $crypt;
});


/**
* Set cookie universal
*/
$di->setShared('cookies', function () {
    $cookies = new Cookies();

    //$cookies->useEncryption(true);

    return $cookies;
});

在控制器中设置cookie;

$this->cookies->set('remember-me', $auth['id'], time() + 15 * 86400);

在控制器中获取cookie;
if ($this->cookies->has('remember-me')) {
    $user_id = (string) $this->cookies->get('remember-me');
} else {
    echo "no cookie found";
    die();
}

有什么问题吗?你遇到了任何错误吗? - Mr. Engineer
在页面刷新后,您是否遇到“未找到cookie”,还是只有在重新启动浏览器后才会出现? - yergo
@Mr.Engineer 我尝试了使用加密和不使用加密的设置。 - Süha Boncukçu
2
@SühaBoncukçu,请将你的cookie与路径一起储存。像这样:$this->cookies->set('remember-me', $auth['id'], time() + 15 * 86400,"/"); - Mr. Engineer
1
@Mr.Engineer,谢谢,看起来它有效。您能将其作为答案并解释一下为什么它有效吗? - Süha Boncukçu
显示剩余3条评论
1个回答

3

Cookie的语法:

setcookie(name,value,expire,path,domain,secure,httponly);

关于 path 参数:
可选项。指定 cookie 的服务器路径。如果设置为 "/",则 cookie 将在整个域内可用。如果设置为 "/php/",则 cookie 仅在 php 目录及其所有子目录中可用。默认值是设置 cookie 的当前目录。
默认情况下,cookie 会在当前路径创建,除非您将其更改为在任何其他路径上保存 cookie 或 '/'
服务器上 cookie 可用的路径。如果设置为 '/',则 cookie 将在整个域内可用。如果设置为 '/foo/',则 cookie 仅在 /foo/ 目录及其所有子目录(如 /foo/bar/)中可用。默认值是设置 cookie 的当前目录。
您可以从以下链接了解有关 pathcookies 的更多信息: http://php.net/manual/en/function.setcookie.php http://www.w3schools.com/php/php_cookies.asp http://www.tutorialspoint.com/php/php_cookies.htm

对我来说,问题是,如果未设置“路径”,为什么浏览器不会保存 cookie 以供下一次会话使用。 - yergo
不是这样的。您可以访问Cookie,但是必须在创建Cookie的同一页上进行访问。根据文档,如果您未设置路径,则仅对当前文件或目录可访问。 - Mr. Engineer

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