【问题标题】:CodeIgniter Session variables not passingCodeIgniter 会话变量未通过
【发布时间】:2012-04-30 09:32:15
【问题描述】:

我在 CodeIgniter 框架中使用原生 PHP 会话 ($_SESSION)。

我有一个“登录”控制器加载视图,用户在其中输入登录名和密码。 用户提交登录表单后,会调用“登录”控制器的 authenticate() 方法。 如果一切正常,我将一些数据添加到 $_SESSION 数组,然后我将用户重定向到“组织”控制器 myOrganisation() 方法。 我在 Login/login() 、 Login/authenticate() 和 Organisation/myOrganisation() 方法中调用 session_start() ,但仍然没有通过会话,因为在 myOrganisation() 方法中会话是新的。

我通过创建 2 个测试 php 页面来测试我的 cookie 功能,我只是在其中回显会话 ID。它完美地工作。 也许我没有把 session_start() 放在它需要的所有地方? (我把它们放在所有控制器方法中)。

登录控制器:

class Login extends CI_Controller {
public function index() {
        session_start();
        $this->load->view("Login/index", $data);

    public function authenticate() {
                    session_start();
                    $_SESSION['login'] = $login; //  everything is alright, redirect
        header("location: ".base_url()."Organisations/MyOrganisation");

组织负责人:

public function MyOrganisation() {
    session_start(); // here session is a new one, not passed
    if(isset($_SESSION['login'])) {

【问题讨论】:

  • base_url() 是否返回与您登录的域相同的域?否则您的会话将重新启动。
  • 出于好奇,您是否有理由不使用会话库中内置的 CodeIgniter?此外,这可能只是您在此处输入的产物,但您还没有关闭您的第一个功能。启动 authenticate() 时 index() 仍然打开。
  • 在 src 中,index() 已关闭。我没有使用 CI 会话,因为我遇到了一些问题,试图配置并使其工作。花了大约 4 个小时,他们从来没有工作过,所以我决定切换到原生版本

标签: php codeigniter session cookies


【解决方案1】:

session_start() 也可以在构造函数中指定,而不是类中的每个方法。这意味着你的两个控制器都可以拥有这个:

function __construct () {
    ini_set("session.gc_maxlifetime", 14400);
    ini_set("session.cookie_domain", .yourdomain.com);
    session_set_cookie_params(14400, '/', .yourdomain.com);
    session_start();
}

构造函数中的前 3 行是为了确保会话 cookie 在您的域下长期有效。

除此之外(而不是封闭的 index() 和 authenticate() 方法),$login 是从哪里来的?

【讨论】:

  • 我只是省略了大部分代码,这并不重要
【解决方案2】:

我不知道我所做的 session_start() 放置有什么问题,但解决问题的一件事是将它放在主文件夹的 index.php 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2011-12-07
    • 1970-01-01
    • 2010-12-24
    • 2013-08-11
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多