您的位置:首页 > 编程语言 > PHP开发

laravel中的杂记

2016-03-16 16:56 253 查看
http://blog.aizhet.com/IT/15833.html一: session的问题laravel的session配置文件字config/session.php中,,使用时可是看看session配置文件中可用的选项设定及注释laravel默认使用file的方式来实现session的,并不用php原生的$_SESSION(php原生的session要看php.ini的位置),所以忽略php相关的session函数,例如session_start()、$_SESSION。laravel在运行的过程中会在storage/session目录下写入session的信息,所以这个目录需要有写权限,否则session就无法写入成功。laravel除了使用默认的file作为session的实现,还支持cookie,memcached,redis和数据库的后端驱动作为session的实现。必要的时候还需要自己实现一个session的实现方式,比如在微信公众账号和用户的交互,这中session就无法直接使用,因为每次都是微信服务器的请求,无法通过请求的来源来辨别用户。laravel的session简要API//session的永久保存(再不过期范围内)Session::put('key','value');//等同于php原生SESSION$_SESSION['key'] = 'value';//get操作$value = Session::get('key','default');//去除操作并删除,类似pop概念$value = Session::pull('key','default');//检测是否存在keySession::has('users');//删除keySession::forget('key');这个对应只要session不过期,基本上是永久保存,下次http请求也是存在的,不同于下面的flash概念。laravel的session中flash概念laravel中提出快闪flash的概念。这个flash两次请求有效(本次和下次请求有效),与本次请求操作多少次无关//保存key ,valueSession::flash('key','value');//取值方法还是一样的Session::get('key');//刷新快闪数据时间,保持到下一次请求Session::keep(array('username','email'));这个flash的概念和上面的put的概念不太一样put:这个对应只要session不过去,基本上是永久保存,下次请求也是存在的flash:保存的值,本次请求可以使用,下次http请求也可以使用,在下一次就不存在了,也就是说下一次的请求用完就被销毁了,不会让session的值变得越来越大,可以保存一些临时的数据flash的情况使用场景比如有:(1):用户请求了页面,出现错误信息,重定向到一个新的页面,需要展示之前的数据(2):用户访问了一个页面,过滤器发现没权限,保存当前页面url,重定向到登录页面,登陆成功,取出值,重定向到原先的页面(这里可能需要刷新保存的快闪数据)session落地的时间(只有在使用$session->save()的方法,来主动保存session)后来看到网络上有个方法
Session::save()
,于是我也用了下,居然发现成功的生成了session的文件。于是我感觉到,Laravel不用php原生的session,那么在controller之后应该做了一些事情,将session写入到文件中,而不是每次
put
操作都写操作,这样会IO操作太频繁的,影响性能的。查看调用相关的代码。laravel编译后,在
bootstrap/compiled.php
class Middleware implements HttpKernelInterface{...public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true){$this->checkRequestForArraySessions($request);if ($this->sessionConfigured()) {$session = $this->startSession($request); // 启动session$request->setSession($session);}$response = $this->app->handle($request, $type, $catch); // 调用controller的methodif ($this->sessionConfigured()) {$this->closeSession($session);         //关闭session$this->addCookieToResponse($response, $session);}return $response;}...protected function closeSession(SessionInterface $session){$session->save();    // 保存session$this->collectGarbage($session);}}小提示:如果不知道函数调用情况,可以在controller中
throw new Exception();
,然后在
/config/app.php
的debug更改为
debug=>true
。可以看到函数的调用关系。可以看见,在调用完controller之后,调用了
session->save()
的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了
exit;
,那么session是不会被保存的,除非主动的写
Session::save()
才能手工的保存起来。因此在debug调试的时候千万要注意啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session的问题