0

アップデート:

.htaccess を使用して、ユーザーが私の Web サイトにアクセスしたときに、これらすべてのファイルを含む特定のフォルダー (/var/www/html/test) にユーザーをリダイレクトしていました。.htaccessは次のようになりました

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (?!^test(/.*|)$)^(.*)$ /test/$1 [NC,L]
</IfModule>

すべてのファイルを /var/www/html に移動し、.htaccess 行にコメントしたとき..iphone のセッションが機能し始めました...理由がわかりません..htaccess でそれを修正する方法はありますか?

----更新終了-----

ユーザーログイン機能を呼び出す ajax 関数があり、ユーザー/パスワードが正しい場合は、ユーザーにログインします。デスクトップ、ラップトップ、samsung s3 電話では動作しますが、IPHONE では動作しません! IPHONE でセッションを設定していないように$this->session->set_userdata('current_email', $email);見えるため、ユーザーをログイン ページにリダイレクトします。おそらく、iPhone Safari の Cookie が自動的に無効になっているなどの理由によるものだと思います。電話で動作するようにこれを回避する最良の方法は何ですか?

アヤックス:

$.ajax({
                url: site_url+"/user/login/"+email,
                type: "post",
                data: 'password='+password+'&email='+email,
                success: function(response){    
                    if(response == "success"){
                      window.location.href = site_url+"/user/invites";
                    }else{
                      alert("Password is not valid");
                    }   
                },  
                error: function(){
                }   
            }); 

/user/login php codeigniter 関数

public function login($email)
        {

                $password = $this->input->post('password');

                if($email != NULL){

                        $this->load->helper('string');
                        $this->load->model('user_model');
                        $this->load->library('session');

                        $user_status = $this->user_model->check_status($email, $password);

                        if (is_array($user_status) && $user_status['is_active']) {

                                $this->session->set_userdata('current_email', $email);
                                $this->session->set_userdata('user_id', $user_status['id']);
                                $this->session->set_userdata('unique_id', $user_status['unique_id']);
                                $this->session->set_userdata('is_active', 1);

                                echo "success"; die();
                        }

                } die();

        }

/ユーザー/招待

 public function invites($unique_id = NULL)
        {

                if($this->session->userdata('current_email') != FALSE){

                        $data['unique_id'] = $this->session->userdata('unique_id');
                        $data['current_email'] = $this->session->userdata('current_email');

                        if($data['unique_id']){

                                $data['invited_users'] = $this->user_model->get_invited_users($this->session->userdata('user_id'));

                                $data['user_details'] = $this->user_model->get_user_details($this->session->userdata('user_id'));

                        $this->template->write_view('header', 'templates/header2', $data);
                        $this->template->write_view('content', 'invites', $data);

                        // Render the template
                        $this->template->render();

                }else{ 
                        redirect('welcome/index/1','refresh');
                }
4

2 に答える 2

0

I can suggest an alternative: use the database as session handler.

You just need to enable it in the application/config/config.php file:

$config['sess_use_database'] = TRUE;

You need a table to store the saved sessions, the manual suggests using this schema:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

Other than this, you don't need to do anything, all the needed queries are handled by CI automatically, no change to be done in your actual code.

UPDATE:

A search on google led me to this CI forum thread (and this SO answer). The cause might be safari caching the AJAX request, so you need to add a timestamp to the url and the issue should be resolved. Example:

var timestamp = new Date().getTime();    
$.ajax({
     url: site_url+"/user/login/"+email+"?"+timestamp, // Or use '/' instead of '?'
于 2013-03-29T22:23:16.660 に答える