0

CodeIgniterフレームワークでネイティブPHPセッション($ _SESSION)を使用しています。

ユーザーがログインとパスワードを入力する「ログイン」コントローラーロードビューがあります。ユーザーがログインフォームを送信すると、「Login」コントローラーのauthenticate()メソッドが呼び出されます。すべて問題がなければ、$ _ SESSION配列にデータを追加し、ユーザーを「Organisation」コントローラーの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'])) {
4

2 に答える 2

0

session_start() can also be specified in a constructor, not every method in a class. That means both your controllers can have this:

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

The first 3 lines in a constructor are to make sure the session cookie is valid for a long time and under you domain.

Besides that (and not closed index() and authenticate() methods), where's $login coming from?

于 2012-04-19T10:03:04.180 に答える
0

私が行ったsession_start()の配置の何が問題だったのかわかりませんが、問題を解決した1つのことは、メインフォルダーのindex.phpに配置することでした。

于 2012-04-21T20:26:57.670 に答える