我有个问题,希望你能帮助我。我的控制器中有一个创建CodeIgniter会话的方法。为确保创建正确,我在创建会话后执行print\r()
函数。然后,在我的Ajax请求中,我放置了一个位置。重新加载
以刷新页面。
这就是我的方法:
public function CreateSession() {
$response = $this->mymodel->registerUser();
//The response in this case of the method registerUser() is an array such as:
/*
Array
(
[id_web_user] => 982
[nombre_web_user] => name
[apellidos_web_user] => lastname
[user_mail] => asf21@gmail.com
[user_password] => 202cb962ac59075b964b07152d234b70
[id_pais] => 1
[profile_picture] => n/a
[id_seccion_registro] => 1
[id_estatus] => 0
[id_usuario_alta] => 1
[id_usuario_mod] => 1
[fecha_ultimo_ingreso] => 2018-03-25 01:43:17
[fecha_alta] => 2018-03-25 01:43:17
[fecha_modificacion] => 2018-03-25 01:43:17
)
*/
//Then when I get the response array, I create a new array which contains an specific data for store in a session within userdata like:
$newdata = array(
'id_web_user' => $response['id_web_user'],
'nombre_web_user' => $response['nombre_web_user'],
'apellidos_web_user' => $response['apellidos_web_user'],
'user_mail' => $response['user_mail'],
'profile_picture' => $response['profile_picture']
);
//Finally I create the session:
$this->session->set_userdata($newdata);
//And then, wheter I do a print_r($this->session->userdata) for verify that the session was created successfully, I get something like:
/*
Array
(
[__ci_last_regenerate] => 1521938249
[id_web_user] => 983
[nombre_web_user] => name
[apellidos_web_user] => lastname
[user_mail] => asf21@gmail.com
[profile_picture] => n/a
)
*/
//In this step I do an echo 1; because my Ajax request is waiting for that and make a "location.reload()", so:
echo 1;
}
这种方法称为槽式Ajax,如;
//base_url was defined previously
$.ajax({
type : "POST",
url : base_url + "/mycontroller/CreateSession",
data : {},
success : function(response) {
if ( response == 1 ) {
location.reload();
}
}
});
最后,在Ajax请求中,我做了location.reload
,但是当页面刷新时,这将把我重定向到http://localhost/
,并且当我想检查包含$this的内容时-
我做错了什么?我试图找到一个解决方案,一些人说,会议。CI的php有一个bug,需要替换CI的Github中存在的新bug。另一些人说这是cookies的问题,因为当会话包含超过4KB的数据时,这个数据会自动地出现错误。这简直是疯了,我希望你能帮我。非常感谢您的支持。
谢谢你的回答。我解决了我的问题,但有一些局限性。CodeIgniter似乎不能在会话中的数组中存储大量数据,所以我以创建官方留档中存在的会话为例。
我举的例子来自:https://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
因此,我基于上面的代码示例构建了一个新的自定义会话。然后,我修改了之前代码的一部分:
$newdata = array(
'id_web_user' => $response['id_web_user'],
'nombre_web_user' => $response['nombre_web_user'],
'apellidos_web_user' => $response['apellidos_web_user'],
'user_mail' => $response['user_mail'],
'profile_picture' => $response['profile_picture']
);
//Finally I create the session:
$this->session->set_userdata($newdata);
对于
$id = $response['id_web_user'];
$username = htmlspecialchars(sprintf('%s %s', $response['nombre_web_user'], $response['apellidos_web_user']));
$newdata = array(
'username' => $username,
'id_web_user' => $id,
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
请看一看,在我的上一个代码中,我仅从构建自定义会话的$response
数组中获取了三个值,它们是:
$response['id_web_user']
$response['nombre_web_user']
$response['apellidos_web_user']
因此,我只取了树值,并将它们分别保存在各自的变量中,现在是:
$id = $response['id_web_user'];
$username = htmlspecialchars(sprintf('%s %s', $response['nombre_web_user'], $response['apellidos_web_user']));
请看一下,我在数组中添加了第三个值(如CodeIgniter示例),即'logged\u in'=
这对我很有效。
结论:我不得不说,在互联网上找到解决方案对我来说永远不起作用。我做的第一件事是在google上搜索为什么通过AJAX调用创建会话的方法不起作用,我发现了两种可能性:
似乎CodeIgniter自2014年以来有一个错误,当时会话通过AJAX创建,对于一个可能的解决方案,您需要将Session.php文件替换到文件夹system/Sessions.php
。这个解决方案从来没有为我工作过,因为这个人在两个引用中建议的文件与我的CodeIgniter文件不匹配。
参考页:
Codeigniter会话不与AJAX工作
https://forum.codeigniter.com/thread-68010.html
参考页:
codeIgniter:登录后丢失会话数据
我希望我的回答足以让我告诉你这是什么以及如何解决我的问题。如果此答案中缺少某些内容,请告诉我以进行更新。谢谢
你把这个图书馆叫做$this吗-
或者在application/config/autoload中调用此库。php文件使用$自动加载[“库”]=数组(“会话”);
这里的问题是我试图通过ajax登录到我的系统。让我给你的第一个解释一下。 当我的用户输入他的登录详细信息时,它将通过Ajax请求发送到服务器,然后在验证后,我创建一个会话条目,并保存用户ID和登录标志等信息。 然后我通过Json将这些值返回给用户,由一段javascript处理,并将用户重定向到仪表板。 如果用户未经身份验证,则显示错误。 但现在这里发生的是。当我创建会话变量时以及当用户重定向到仪
问题内容: 我正在将DHTMLX网格导出到csv,并且已经能够成功创建.CSV文件。我遇到的问题是它没有提示用户保存/打开文件。我正在使用来自javascript的$ .post调用将CSV字符串发送到PHP,然后将该字符串写入csv。由于某种原因,它没有为用户创建提示,但它已成功写入文件并保存在服务器上。下面是相关代码: JS: PHP(export.php): 这段代码可以完全按照我的需要导出
问题内容: 我有一个使用AJAX加载新php文件并更新显示的单页网站。 我从主页开始php会话,但是当我使用ajax更新内部html时,我需要这些会话变量来加载新的php文件。 这篇文章与此类似:PHP会话变量未保留。但是我检查了一下,我的php.ini有 主页PHP: 在用户输入之后,我使用ajax调用php文件并加载页面的一个小节: 有人可以告诉我我缺少哪些重要步骤吗?谢谢。 更新: 在主页和
问题内容: 我将用户输入(在这种情况下,只是数量和产品代码)传递给php脚本,以通过ajax存储到会话数组中。我希望,每次用户单击“提交”并进行ajax调用时,数量和产品代码都会添加到会话数组中。但是现在发生的是,每次它更新会话中的现有数据时。因此,仅存在一对数据。 这是我的ajax脚本: 我的PHP sendToCart.php 问题答案: 每次进行ajax调用时,您都会覆盖会话变量。 您需要读
所以我设置了一个汇流Kafka JDBC连接器。首先,我启动一个模式注册表,如 这是schema-registery.properties文件 接下来,我启动一个像这样的独立连接器 connect-avro-standalone.properties是 jdbc-source.properties是 我使用的查询只是为了测试的目的,我要使用的真正查询将实现增量模式,并且将不包含where子句。 我
About This app contains a CRUD interface for flower pots as well a notifier on when to water the flowers. Technologies used: Javascript jQuery Twitter Bootstrap PHP (with Codeigniter framework v3.1.4)