gpt4 book ai didi

php - 当我触摸 CWebUser 时,Yii 总是启动一个 session

转载 作者:搜寻专家 更新时间:2023-10-31 21:31:17 25 4
gpt4 key购买 nike

我正在开发一个 RESTful API 服务器,它的一些 API 方法需要一个有效的 session ,以带有 session ID 的 cookie 的形式指示。

我将 Yii v1.1.15 与常用的 PHP session 处理程序(可能是"file")一起使用。

事情是,在每次调用 CWebUser 时,它都会创建一个 session ,而我不希望这样。只有当我明确创建 session 时, session 才应该存在,这意味着在登录时(或注册自动登录用户)。例如,如果在某个 API 方法中,我检查用户是否是访客,使用的结构包括:

Yii::app()->user->isGuest

它会自动创建一个 session ,因为此代码是在 CWebUser.init() 中给出的。

现在,我不急于改变 CWebUser(事实上,在已经扩展的类中改变它,在其他方面稍微改变了它)因为我担心这会对系统。

任何人都可以启发我吗?

你会怎么做?

谢谢!

环境:


// Yii v1.1.15
// session component configuration: (but believe me, I've tried every
// combination - its not really related. Check CWebUser.init()...)
'session' => array(
'class' => 'CHttpSession',
'autoStart' => false,
'sessionName' => 'MY_COOKIE_NAME',
'cookieMode' => 'allow',
'cookieParams' => ['lifetime' => 1000],
'gcProbability' => 33,
'timeout' => 1000,
'savePath' => '/tmp/',
),
// Web User's _allowAutoLogin_ is set on 'false'

最佳答案

因此您需要检查用户是否已登录(这就是您使用 isGuest 的原因)但您不想使用 session ?

isGuest 方法使用 session 变量来检查用户是否已登录。创建CWebUser 时会打开 session 。 (在你说的 init 方法中。) isGuestCWebUser 类的一部分。如果你想调用这个方法,它总是会创建一个 session 。除非你覆盖它。

我认为您可以采用两种方式:

  1. 打开一个 session ,检查用户是否登录 (isGuest),然后仅在用户未登录时关闭它。您需要覆盖 isGuest 方法。在需要时覆盖任何其他方法以打开 session 。 (登录/注册)
  2. 让客户端在每次请求时发送其登录数据,这样您就不必检查 session ,也不必打开它。

在这两种情况下,您都需要覆盖 CWebUser.init(),这样无论何时创建 CWebUser,它都不会打开 session 。

关于php - 当我触摸 CWebUser 时,Yii 总是启动一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com