laravel 4持续存在数据 - jquery ajax提交

Ray*_*Ray 4 php session jquery laravel laravel-4

我在使用laravel 4.1会话时遇到了问题并且出现了意外行为.

根据我调用控制器方法的方式,会话可以工作或不工作我的应用程序调用POST路由 - 将项目添加到作为会话的购物车.由于某种原因,会话不会更新.但是,如果我使用GET请求调用相同的函数,该函数将按预期工作.

routes.php包含这两条路线:

Route::get('testAdd', array('uses' => 'ProductsController@addToCart'));

Route::post('products/addToCart', array('uses' => 'ProductsController@addToCart'));
Run Code Online (Sandbox Code Playgroud)

两者都指向相同的方法

该方法目前是这样的(用于测试):

public function addToCart() {

  Session::put("addcarttest", "add to cart");
  return json_encode(Session::get('addcarttest'));

}
Run Code Online (Sandbox Code Playgroud)

如果我使用POST方法调用该函数(使用表单数据),我会得到预期的结果和会话的内容.

但是,如果我然后检查会话(使用分析器)它不存在.数据没有持续存在.

如果我然后使用GET路由调用相同的方法,我得到预期的结果,但重要的是会话仍然存在.

我想也许POST方法删除了会话但是一旦它存在就会停留在那里 - 如果我使用GET方法并且sessin存在,如果我再次尝试POST方法示例会话保持原位 - 所以POST方法不会删除会话.

这让我发疯了 - 我已经失去了很多时间,看不出原因.

我错过了Laravel处理POST v GET的方法吗?为什么两种不同的方法会对底层函数产生影响?

我需要做什么才能使会话与POST一起正常工作?

更新:

我现在尝试了会话的数据库驱动程序,并获得了相同的行为.

我已经进一步测试了一个阶段 - 我创建了一个基本表单并提交给了url,并且该方法按预期工作.我目前的表单数据由jquery ajax提交,并假设它们在behviour中完全相同.

我的jquery提交函数是这样的:

$.ajax({
     url: '/products/addToCart',
     type: 'POST',
     async: false,
 })
     .done(function() {
         console.log("success");
     })
     .fail(function() {
         console.log("error");
     })
     .always(function() {
         console.log("complete");
     });

 return false;
Run Code Online (Sandbox Code Playgroud)

我将async设置为false - 我假设等待服务器响应.(如果是真的也不起作用).

所以问题是表单提交和ajax提交之间的细微差别.这两种方法都采用相同的路由和方法 - 一种方法保存会话数据 - 另一方法没有.

我怎么克服?Jquery提交对于应用程序的这一部分至关重要.

Ray*_*Ray 10

成功!

我发现了与laravel 3相关的类似问题.对于在ajax调用中持续存在的会话,我需要正确地返回响应.

return json_encode($response);
Run Code Online (Sandbox Code Playgroud)

这导致了这个问题.它似乎不是一个有效的响应,使会话能够持久存在.我改成了:

return Response::json($response); 
Run Code Online (Sandbox Code Playgroud)

这使会话保持不变!

由于某种原因,正常表单提交或调用方法允许第一个,但ajax不允许.

我在其他地方看到了关于影响会话数据的方法中的echo语句的引用,但是我认为没有任何东西 - 我认为返回的行为必须类似于echo

现在开心(直到下一个问题)

这是触发解决方案的帖子:http: //forumsarchive.laravel.io/viewtopic.php?id = 1304

  • 你先生刚刚结束了我的一天.我遇到了同样的问题(请参阅http://stackoverflow.com/questions/23521781/laravel-4-auth-via-ajax-possible-session-issue/23558877#23558877).我正在使用Laravel 4.1以及以下设置:PHP 5.5.12,会话驱动程序'文件'.你的方法也解决了我的问题! (2认同)