【问题标题】:Phalcon Rest Micro sessions not setPhalcon Rest Micro 会话未设置
【发布时间】:2015-05-04 20:06:32
【问题描述】:

我尝试使用 Phalcon 制作一个休息应用程序,我保存了一些信息 会话中的登录用户,但我没有让它工作,我的代码:

    $this->session->set(  Sessions::USERINFO, array (
            'login'    => true,
            'type'     => UserTypes::ADMIN,
            'username' => $this->user->getUsername(),
            'adminid'  => $this->user->getAdminID(),
            'fullname' => $this->user->getFullName(),
            'avatar'   => $this->user->getAvatar() )
    );

    return $this->session->get(  Sessions::USERINFO );

当他返回会话时它可以工作,但是当我尝试在另一个请求中获取会话时它返回空

    return array("session" => $this->session->isStarted(),
                 "session Data" => $this->session->get(Sessions::USERINFO));

isStarted 返回 true
获取返回 null

Sessions::USERINFO

是一个具有 const 值的类

const USERINFO = "userInfo";

创建会话变量

  $di->setShared( 'session', function () {
    $session = new Session();
    $session->start();

    return $session;
  } );

【问题讨论】:

  • 请将您的代码作为文本包含,而不是屏幕截图。它更适合屏幕阅读器、小屏幕和移动应用程序。

标签: php api rest session phalcon


【解决方案1】:

我正在使用它来保存我的会话:

    $obj = $this->request->getJsonRawBody();

    $user = Users::findFirstByUsername($obj->username);

    if($user) {
        if($this->security->checkHash($obj->password, $user->password)) {
            unset($user->password);

            $this->session->set('auth', $user->toArray());
            $response = $user->toArray();
        }
        else {
            $response = array('msg' => 'failed');
        }
    }
    else {
        $response = array('error' => 'User not found');
    }

    $this->setPayload($response);

    return $this->render();

这是从我的会话中接收信息

    if($this->session->get('auth')['username']) {
        $response = $this->session->get('auth');
    }
    else {
        $response = array('msg' => 'noInfo');
    }

    $this->setPayload($response);

    return $this->render();

这就是我开始会话的方式:

$di->set('session', function () {
    $session = new SessionAdapter();
    $session->start();

    return $session;
});

效果很好,你可以试试这个。

【讨论】:

  • 我确实使用邮递员,只有邮递员才能工作,他记得会话,但在从我的前端发送的真实帖子中却没有。
  • @TriPSs,我用代码示例更新了我的答案。我在我的应用程序中使用它,您可能会发现它很有用。
  • 你可以用你如何创建会话变量来更新你的例子吗?也更新了我的问题。
【解决方案2】:

我发现了问题。必须在我的前端应用程序中启用此功能:

    RestangularProvider.setDefaultHttpFields({
        withCredentials: true
    });

前端并未随每个请求发送 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2019-12-29
    • 2014-06-16
    • 1970-01-01
    • 2013-05-13
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多