Php 会话变量未保存在iphone上
更新: 我使用.htaccess将用户重定向到一个特定的文件夹(/var/www/html/test),当他们访问我的网站时,该文件夹包含所有这些文件。 .htaccess看起来像这样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
<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"');
?>