关于session的一个现象
路由中:
过滤器中:
在一个页面中每次请求路由A之前先执行:
Session::set('isaccess','haveaccess');
然后请求路由A。
注意这是一个页面中多次请求路由A,而不是在地址栏中多次请求路由A。
第一次路由A的结果是$guan=haveaccess,这正常没问题。
第二次,第三次,以后的请求中$guan=noaccess。这我就感觉好奇了,难道Session中的isaccess是局部变量?这也不应该啊,因为第一次请求时正常的。为啥后面就因为执行了filter中的
Route::group(array('before'=>'alonevisit'), function (){
Route::get('A',...)
});
过滤器中:
Route::filter('alonevisit', function() {
if (Session::has('isaccess')) {
$guan = Session::get('isaccess', 'noaccess');
if ($guan == 'noaccess') {
return Response::make("对不起页面没找到!", 404);
} else {
Session::put('isaccess', 'noaccess');
}
} else {
return Response::make("对不起页面没找到!", 404);
}
});
在一个页面中每次请求路由A之前先执行:
Session::set('isaccess','haveaccess');
然后请求路由A。
注意这是一个页面中多次请求路由A,而不是在地址栏中多次请求路由A。
第一次路由A的结果是$guan=haveaccess,这正常没问题。
第二次,第三次,以后的请求中$guan=noaccess。这我就感觉好奇了,难道Session中的isaccess是局部变量?这也不应该啊,因为第一次请求时正常的。为啥后面就因为执行了filter中的
Session::put('isaccess', 'noaccess');就是一直是noaccess?想不通啊。
4 个回复
00幽靈00 - 略知一二,不求甚解
赞同来自: xsmyqf
这时候 $guan 的值是从session中取出来的,所以也是 haveaccess
然后你这里的if判断,因为 $guan 的值是 haveaccess ,所以执行else部分
这时你将session中的 isaccess 设置为 noaccess
所以从第二次开始
执行之后,$guan 的值是从session中取出来的 noaccess
并且在if中没有再次设置session中的值,此后 $guan 的值一直都是 noaccess
LZ想通了吗?
FiveSay - 成武
赞同来自: xsmyqf
2、session 不是变量,这是基础,当其值被改变时将一直保持,直到再次被赋值或者销毁。
FiveSay - 成武
赞同来自: xsmyqf
FiveSay - 成武
赞同来自:
虽然你每次请求 iframe 页面时都要执行一次这个 javascript 函数,但里面那段 php 脚本根本就不可能被执行到!因为这个 php 脚本所在的父页面根本就没有被刷新,服务端就不会再次解析和执行这段 php 代码!
这是很基础的东西了,这要是我带出来的,一定会被我一脚踹到老远,真的。