Php 会话变量未保存在iphone上

Php 会话变量未保存在iphone上,php,iphone,ajax,codeigniter,mobile-safari,Php,Iphone,Ajax,Codeigniter,Mobile Safari,更新: 我使用.htaccess将用户重定向到一个特定的文件夹(/var/www/html/test),当他们访问我的网站时,该文件夹包含所有这些文件。 .htaccess看起来像这样 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule (?!^test(/.*|)$)^(.*)$ /test/$1 [NC,L] </IfModule> /用户/登录php codeigniter函数 public function

更新:

我使用.htaccess将用户重定向到一个特定的文件夹(/var/www/html/test),当他们访问我的网站时,该文件夹包含所有这些文件。 .htaccess看起来像这样

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (?!^test(/.*|)$)^(.*)$ /test/$1 [NC,L]
</IfModule>
/用户/登录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');
                }

我可以建议另一种选择:将数据库用作会话处理程序

您只需要在application/config/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自动处理,实际代码中不需要做任何更改

更新:

通过谷歌搜索,我找到了(和)。原因可能是safari缓存AJAX请求,因此需要向url添加时间戳,问题应该得到解决。例如:

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

ajax调用是否发送到外部域

如果是这样,这可能与安全问题有关。 见:

我只在IE中处理过这个问题,我不知道这是否会发生在iOS上

因此,请尝试在ajax接收端脚本中添加以下内容:

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

它们已设置。只是不在iPhone上!我正试图找到一种不用db会话的解决方法。我以前试过,但没用。我以前也见过这种解决方案,但我不确定这是否适用于我的情况。我甚至尝试了DB会话解决方案,但iphone仍然重定向到主页,因为它无法检测电子邮件。你是否尝试在多部iphone上测试过这种解决方案,以确保不仅仅是一部手机有问题?这可能是缓存问题,查看我的更新答案了解可能的方法您是否尝试过使用本机php会话
$\u会话['current\u email']=$email
而不是codeigniters方法?@CodeCrack会话是否使用加密密钥?你能发布你的config.php关于会话的信息吗?试着在你的配置中将sess\u match\u useragent设置为false,看看是否有什么不同
<?php
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
?>