更新
我正在使用.htaccess将用户重定向到访问我网站时拥有所有这些文件的特定文件夹(/ 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函数,如果用户/密码正确,它会登录用户。它适用于台式机,笔记本电脑,三星s3手机,但不适用于IPHONE! $this->session->set_userdata('current_email', $email);
似乎没有在IPHONE上设置会话,因此将用户重定向回登录页面。我猜也许是因为iphone safari cookies被自动禁用或类似的东西。有什么方法可以解决这个问题,以便在手机上运行?
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(){
}
});
/ user / login php codeigniter function
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)
我可以建议一个替代方案:使用数据库作为会话处理程序。
您只需要在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自动处理,无需在实际代码中进行任何更改。
<强>更新强>
在谷歌搜索引导我this CI forum thread(和this SO answer)。原因可能是safari缓存了AJAX请求,因此您需要向URL添加时间戳,并且应该解决问题。例如:
var timestamp = new Date().getTime();
$.ajax({
url: site_url+"/user/login/"+email+"?"+timestamp, // Or use '/' instead of '?'
答案 1 :(得分: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"');
?>
注意:确保此标题放在所有必需的页面上,并且它出现在脚本的最开头。