相关疑难解决方法(0)

如何在PHP中创建持久会话?

我曾经session_start()在PHP中启动会话,但是当我的浏览器关闭时,会话就消失了.

如何使用PHP创建持续浏览器关闭的持久会话?

php session-cookies

28
推荐指数
1
解决办法
3万
查看次数

Zend框架会话过早到期

我正在使用Zend Framework for PHP并使用Zend_Session模块处理会话.这是我在初始化程序(或引导程序)中的内容:

Zend_Session::start();
Zend_Session::rememberMe(864000);
Run Code Online (Sandbox Code Playgroud)

864000秒应该是好的10天,但我仍然被踢出大约一个小时(或者可能少一点).我已经通过设置为10秒来测试这个语句是否有效,并且确实在适当的时候被踢出去了,但是当我将它设置为非常高的值时,它不起作用!我在这里查看了一些文档:http: //framework.zend.com/manual/en/zend.session.html

我看到的另一种方法是使用以下方法:

$authSession = new Zend_Session_Namespace('Zend_Auth'); 
$authSession->setExpirationSeconds(3600); 
Run Code Online (Sandbox Code Playgroud)

现在,我有不同的命名空间.这是否意味着如果我想让它们过期,我必须为所有这些设置它?我还没有测试过这种设置过期的方法,但我真的很想看看这里的大师们对于解决这个问题的正确方法有何看法.非常感谢...

此外,有谁知道我怎么能这样做,以便会话永远不会到期?我已经尝试将第二个设置为0和-1,但是会引发错误.

session zend-framework

13
推荐指数
2
解决办法
2万
查看次数

使用Zend_Session :: rememberMe持久登录

我正在使用Zend_Session管理我的用户会话,我希望在我的应用程序中实现"记住我"选项,以保持用户登录2周左右.

我注意到Zend_Session已经有一个内置函数调用Zend_Session::rememberMe,但我不确定该函数逻辑是否正确用作持久登录.

从本质上讲,rememberMe函数只是延长了活动会话的到期日期,这意味着如果用户使用remember me选项,他将使用活动会话保持登录状态2周.

这带来了两个主要问题.

  1. 我将会话存储在数据库中,这意味着所有这些非活动用户都在我的会话表中存储了2周.我有超过50k非活动会话,这会损害应用程序性能.
  2. 我想知道用户是否在24小时不活动后回到该网站,并重新验证他的信息.由于他的会话仍然开放,我无法确定他是否在1小时或1周后回来,因为他有相同的活动会话ID.

我已经读过,如果我想实现一个记住我的功能,我不应该使用会话cookie,我应该创建另一个"登录cookie"来记住一个哈希的user_id和一个令牌.这里是完整的解释:为网站实现"记住我"的最佳方式是什么?

那么为什么zend框架提供这样的功能呢?如果使用它可以创建性能和安全问题?

php zend-framework

11
推荐指数
2
解决办法
5746
查看次数

Zend Framework在不活动后自动注销

我正在开发一个包含多个子应用程序的应用程序,我想在30分钟不活动后实现自动注销.我有一个AuthController,其登录和注销操作使用Bootstrap.php以及前面的控制器插件映射到自定义/登录和/登出路由,如下所示:

class Plugin_SessionTrack extends Zend_Controller_Plugin_Abstract {

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {  

        $employeeSession = new Zend_Session_Namespace('employeeSession');
        $employeeSession->setExpirationSeconds(10);

    }
}
Run Code Online (Sandbox Code Playgroud)

我是PHP和Zend的新手,10秒后会话到底发生了什么?我把它设置为低测试.我想要发生的是,如果通过前端控制器插件的最后一次请求的时间大于30分钟,则销毁会话并将用户注销并将其重定向到/ login.

我可以清楚地看到我没有跟踪上次请求的时间,但我希望每次用户通过此preDispatch方法发出请求时都会刷新setExpirationSeconds.

也许需要使用cookie?我不需要实际启动注销操作,它可以在用户下次发出请求时进行处理,如果他们在过去半小时内没有做任何事情会话被销毁并且他们已经注销,这意味着如果我走开45分钟,我的屏幕看起来仍然相同,但如果我点击一个链接或尝试提交一个表格,我就把它发送给/ login.我稍后会担心某种类型的JS倒计时警告.

编辑:如果有人想看到它,这是我的引导程序:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    /**
     * Custom routes:
     * 
     * /login
     * /logout
     */
    protected function _initRoutes()
    {

        $router = Zend_Controller_Front::getInstance()->getRouter();

        $loginRoute = new Zend_Controller_Router_Route('login', array('controller' => 'auth', 'action' => 'login'));

        $logoutRoute = new Zend_Controller_Router_Route('logout', array('controller' => 'auth', 'action' => 'logout'));

        $routesArray = array('login' => $loginRoute, 'logout' => $logoutRoute);

        $router->addRoutes($routesArray);

    }

    protected function _initPlugins()
    { …
Run Code Online (Sandbox Code Playgroud)

php session zend-framework

9
推荐指数
1
解决办法
7423
查看次数

标签 统计

php ×3

zend-framework ×3

session ×2

session-cookies ×1