2013-03-29 92 views
0

UPDATE:會話變量沒有被保存在iPhone上

我用的.htaccess將用戶重定向到一個特定的文件夾(在/ var/www/html等/測試)是把所有這些文件時,他們訪問我的網站。 的的.htaccess這個樣子

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

,當我提出的所有文件到/ var/www/html等和評論的的.htaccess線.. iPhone上的會話開始工作......我不知道爲什麼。 。有沒有辦法用.htaccess解決這個問題?

----結束更新-----

我有一個調用用戶登錄功能,如果用戶/密碼是正確的,它在用戶登錄的AJAX功能。它適用於臺式機,筆記本電腦,三星s3手機,但不在IPHONE上! $this->session->set_userdata('current_email', $email);似乎不會在IPHONE上設置會話,因此會將用戶重定向回登錄頁面。我猜測這可能是因爲iphone Safari瀏覽器cookie被自動禁用或者類似的東西。什麼是最好的方式來解決這個問題,所以它可以在手機上使用?

AJAX:

$.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(){ 
       } 
      }); 

/用戶/登錄PHP笨功能

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'); 
       } 
+0

它可能是一個緩存問題,請參閱我的更新回答可能的方法 –

+0

您是否嘗試過使用本機php會話'$ _SESSION ['current_email'] = $ email'而不是codeigniters方法? – Jeemusu

+0

@CodeCrack會話使用加密密鑰嗎?你可以發佈你的** config.php **關於會議請願書嗎? – sbaaaang

回答

0

我可以建議的替代方法:使用數據庫會話處理器。

你只需要啓用它在應用程序/配置/ config.php文件:

$config['sess_use_database'] = TRUE; 

你需要一個表來存儲保存的會話手冊建議使用此模式:

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`) 
); 

除此之外,您不需要做任何事情,所有需要的查詢都由CI自動處理,不會在您的實際代碼中進行更改。

UPDATE:

搜索谷歌使我this CI forum thread(和this SO answer)。原因可能是Safari瀏覽器緩存AJAX請求,所以你需要添加一個時間戳到網址,這個問題應該得到解決。例如:

var timestamp = new Date().getTime();  
$.ajax({ 
    url: site_url+"/user/login/"+email+"?"+timestamp, // Or use '/' instead of '?' 
+0

它們已設置。只是不在iPhone上!我試圖找出一個解決方法,沒有數據庫會話。 – CodeCrack

+0

請參閱更新的答案 –

+0

我曾嘗試過,但沒有奏效。我之前也看到了這個解決方案,但我不確定這適用於我的案例。 – CodeCrack

0

是否將ajax調用發送到外部域?

如果是這樣,這可能與安全問題有關。 請參閱:http://drupal.org/node/918194

我只處理了IE中的這個問題,我不知道這是否會發生在iOS上。

所以嘗試添加對Ajax的接收端腳本如下:

<?php 
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
?> 

注:確保這頭被放在所有必要的網頁,它發生在你的腳本的開始。