PHP 的 ini_set 函数无法在类方法内使用吗?

2017-04-06 19:29:23 +08:00
 loogle

我想做一个‘一星期内自动登录’功能,后端登录代码如下:`

class loginController extends core\lib\Controller{
public function login()
{
    if($_POST['autoLogin']==1)
    {
        ini_set('session.gc_maxlifetime', "604800"); // 秒
        ini_set("session.cookie_lifetime","604800"); // 秒
    }
    session_start();
    if(strtolower($_SESSION['vCode'])!=strtolower($_POST['vCode']))
    {
        echo 'vCode_error';
        exit(0);
    }

    $model=new mongoModel('wind','users');
    $name=$model->findOne('name',$_POST['username']);
    if(!empty($name))
    {
        if($name['password']==$_POST['password'])
        {
                $_SESSION['username']=$_POST['username'];
                echo 'success';
        }
        else
            echo 'password_error';
    }
    else
    {
        echo 'user_error';
    }
}

}`

通过前端传来的‘ autoLogin ’值来判断用户是否选择了‘一周内自动登录’这个 checkbox,如果选择,则更改 session 和保存了 sessionid 的 cookie 的最大保存时间为 1 个星期。但是我发现这样不行, cookie 的有效期依然为结束会话时销毁,但是我把:

ini_set('session.gc_maxlifetime', "604800");
ini_set("session.cookie_lifetime","604800");

这两段代码放到项目入口文件里, cookie 的有效期成功到了一个星期以后,这是为啥呢?作用域的问题吗? 新手求问。

2248 次点击
所在节点    PHP
7 条回复
vibbow
2017-04-06 22:45:56 +08:00
好像 LZ 对 session 的用法产生了一些理解上的偏差......
msg7086
2017-04-07 01:26:35 +08:00
为什么用户的登录选项代码里你要修改服务器的综合配置?
loogle
2017-04-07 13:46:38 +08:00
@msg7086 难道除了修改服务器配置还有其他办法修改 session 的保存时间吗
loogle
2017-04-07 13:49:28 +08:00
@vibbow 刚接触 php 不久,是哪儿出问题了呢?谢谢!
vibbow
2017-04-07 14:11:56 +08:00
@loogle
session 之所以称之为 session ,就是给当前会话用的,浏览器关了会话就结束了。
你要做自动登录,信息是需要存在 cookies 里,而不是 session 里的。
更不是通过 session 存在 cookies 里...
loogle
2017-04-07 14:40:31 +08:00
@vibbow 你这也是解决方法,信息都放在 cookie 里很容易实现自动登录,但很不安全,还是放服务端安全一些,你不可能通过判断是否存在 cookie 就自动登录吧。客户端是靠存在 cookie 里的一个 session id 与服务端 session 通信的,一个 seeion id 对应一个连接,要用 session 存信息就离不开 cookie ,假设要把信息保存一星期,除了设置 session 最大保存时间外还要设置存放了 session id 的 cookie 的最大保存时间,我这写法没错,我也找到了原因所在,原来我在首页的控制器中用到了 session,这个时候 session_start()这个函数已经把默认 session 配置加载进来,而我在登录的时候去再去改默认配置已经不行了,我把首页的 session-start()去掉,果然可以保存一星期了
loogle
2017-04-07 16:11:57 +08:00
@vibbow 查了好多资料,果然是我搞错了,一直想把信息存 session 里,谢谢指点!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/353021

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX