私はcodeigniterをフレームワークとして使用しています。
まず、localhost
を使用しますが、IPアドレスに変更すると、ログイン機能が機能しなくなります。別のコントローラーにリダイレクトすると、セッションが失われることがわかりました。
print_r($this->session->all_userdata());
の結果は次のとおりです
[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2
[ip_address] => 10.42.68.71
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[last_activity] => 1285962398
[user_data] =>
ご覧のとおり、user_data
に渡されるデータはありませんが、テスト時にリダイレクトの前に設定されました。
コントローラーを2つに分け、最初の1つはユーザー->ログイン関数のハンドラー、もう1つはプランナーで、ユーザーコントローラーからリダイレクトするリンクのハンドラーです。
users.php
(最初のコントローラー):
$this->load->model('users_model');
$this->load->model('mymodel');
$this->load->database();
$email = $this->input->post('email');
$pass = $this->input->post('password');
$type = $this->input->post('type');
// Authenticate the user
$userdata = $this->users_model->auth_user($email,$pass,$type);
if($userdata)
{
$data = array('FIRSTNAME' => $userdata->FIRSTNAME,
'LASTNAME' => $userdata->LASTNAME,
'EMAIL' => $userdata->EMAIL,
'LOGIN' =>TRUE, 'TYPE' => $type);
$this->session->set_userdata($data);
redirect('planner/view_system','refresh');
}
planner.php
(2番目のコントローラー):
function __construct() {
parent::__construct();
if ( ! ($this->session->userdata('LOGIN')))
{
print_r (var_dump($this->session->userdata('FIRSTNAME')));
print_r($this->session->all_userdata());
}
$this->load->helper(array('form','html','url'));
そして、これが私の設定です
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
まず、セッションアイテムに「\ n」や「\ v」などの特殊文字が含まれていないことを確認する必要があります。これらの文字により、文字列が途中で切れる場合があります。 trim() を試してください。
それが役に立たない場合は、おそらくエンコーディングの問題です。セッション項目を設定する前に暗号化し、使用する必要があるときに復号化してください。
$ config ['cookie_domain']をlocalhostに設定することでこの問題を解決しました
$config['cookie_domain'] = "localhost";
私は最初、その変数をwww.exampledomain.comなどの完全修飾ドメイン名に設定していましたが、その間ローカルサーバーを使用していました。
Codeigniterセッションクラスでの予期しないエラーを回避するために、スクリプトが実行されているドメインは、$ config ['cookie_domain]で設定されたドメインと同じである必要があります。
私は同様の問題を抱えており、問題は非常にありふれたものになっています...
私の問題の悪の根源は、文字「_」を含む名前でした
例、以前は
$this->session->set_flashdata('message_success', 'some message');
になった後
$this->session->set_flashdata('messagesuccess', 'some message');
私の問題は解決しましたこのリソースのおかげで男 http://biostall.com/losing-codeigniter-sessions/
autoload.phpファイルに1つ追加する必要があります。
$autoload['libraries'] = array('database','session');
これはセッションのリダイレクトの問題を解決します
リンクを確認し、正しく記述されていることを確認してください。絶対URLを記述するときは、必ず「www」部分を追加してください。これが私の場合の問題でした。これが誰かの助けになることを願っています。
良い:header( "Location: http://www.yourdomain.com/controller/page ");
悪い(セッションを中断します):header( "Location: http://yourdomain.com/controller/page ");
私の経験から、問題は次のとおりです。
この問題に遭遇したとき、最初はショックを受けました。セッションデータに@記号が付いていたので、それは私に起こりました。
解決策は、base64_encodeを使用してデータを単純にエンコードすることです。
例えば:
$Data = urlencode( base64_encode($Email) );
$this->session->set_userdata('Data', $Data);
それを再利用するには、次のようにします:
$Data = base64_decode( urldecode( $this->session->userdata('Data') ) );
お役に立てれば。
新しい検索:この問題は、someブラウザーおよびデバイスで引き続き発生します。したがって、これは実際にはもう解決策ではありません。たとえば、Samsung Android、MicroMAX Androidで動作しますが、Huawei Androidでは動作しません。
私はまったく同じ問題を抱えており、これが私がしていることです。まず、ファイル_system/libraries/Session/Session.php
_に移動します。 _140
_行のsession_start();
をコメントします。 _function _configure
_で、_// Security is king
_の下に数行コメントします
_// ini_set('session.use_trans_sid', 0);
// ini_set('session.use_strict_mode', 1);
// ini_set('session.use_cookies', 1);
// ini_set('session.use_only_cookies', 1);
// ini_set('session.hash_function', 1);
// ini_set('session.hash_bits_per_character', 4);
_
次に、ルートプロジェクトの_index.php
_ファイルに移動します。置く、session_start();
以下_<?php
_
お役に立てれば。
遅すぎますが、幸いにも同じ問題に直面していました。以下のように設定を少し変更することでこの問題を解決します。
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE; // change this
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE; // change this
$config['sess_match_useragent'] = TRUE; // change this
$config['sess_time_to_update'] = 300;
これがあなたにも役立つことを願っています。
私の場合、いくつかのテスト(localhostでhttpsおよびhttpを使用)の後、その問題に対してエラーが発生し、$ config ['cookie_secure']が適切に設定されていないため、config.phpで変更を試すことができます。
$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https
乾杯!
私と同じ問題。
コントローラにセッションライブラリをロードしているか確認してください。
$this->load->library('session');