laravel5 调用model里的Session怎么调用

Laravel5里的Session怎么调用_百度知道
Laravel5里的Session怎么调用
提问者采纳
Public long getCreationTime(),也会自动失效得到session的创建时间 方法,此方法返回一个long类型,服务器都会为之分配唯一一个不会重复的sessionID sessionID是由服务器同意管理的;session对象.http.getId() sessionID的长度为32位判断是不是新的session Public boolean isNew();Session:让用户的session失效 若用户的session失效,则在session所保留的全部操作也会消失 方法,没有任何继承关系 用户只要一连接服务器则立刻分配一个session给用户session的主要方法,所以只有唯一的一个http包下有此接口:session对象主要用于保存用户的各种信息;Support&#92,判断当前的session是否是新建立的sessionsession的属性设置 设置属性setAttribute() 取得属性getAttribute() 删除属性removeAttribute() 通过session能够对用户是否登陆做出验证★用户注销.servlet,人为不能控制 方法.HttpSession接口的实例化对象 session属于HTTP协议范畴之内的对象:session,通过Date类可以取得一个完整的时间取得用户最后一次操作的时间 方法;Facades\sessionID:任何连接到服务器上的用户:Public Void invalidate()使session失效(需手工操作) 若session长时间不被使用use Illuminate&#92:服务器上通过session来分别不同的用户--&gt,知道它的生命周期(一般是900S)超时或者被人为释放为止 可以通过session对象来判断此用户是否是合法用户 在服务器上通过session来区分每一个上网用户 session对象属于javax
来自团队:
其他类似问题
为您推荐:
session的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁[ Laravel 5.2 文档 ] 服务 —— Session - 推酷
[ Laravel 5.2 文档 ] 服务 —— Session
由于HTTP驱动的应用是无状态的,所以我们使用Session来存储用户请求信息。Laravel通过干净、统一的API处理后端各种Session驱动,目前支持的流行后端驱动包括
Session配置文件位于
config/session.php
。默认情况下,Laravel使用的
驱动为文件驱动,这对许多应用而言是没有什么问题的。在生产环境中,你可能考虑使用
驱动以便获取更快的session性能。
驱动定义请求的Session数据存放在哪里,Laravel可以处理多种类型的驱动:
&– session数据存储在&
storage/framework/sessions
&– session数据存储在经过加密的安全的cookie中;
&– session数据存储在数据库中
&– session数据存储在memcached/redis中;
&– session数据存储在简单PHP数组中,在多个请求之间是非持久化的。
注意:数组驱动通常用于运行测试以避免session数据持久化。
1.2 Session驱动预备知识
session驱动时,需要设置表包含
项,下面是该数据表的表结构声明:
Schema::create('sessions', function ($table) {
$table-&string('id')-&unique();
$table-&text('payload');
$table-&integer('last_activity');
你可以使用Artisan命令
session:table
来生成迁移:
php artisan session:table
composer dump-autoload
php artisan migrate
在Laravel中使用Redis
驱动前,需要通过Composer安装
predis/predis
1.3 其它Session相关问题
Laravel框架内部使用
session键,所以你不应该通过该名称添加数据项到session。
如果你需要所有存储的session数据经过加密,在配置文件中设置
2、基本使用
访问session
首先,我们来访问session,我们可以通过HTTP请求访问session实例,可以在控制器方法中通过类型提示引入请求实例,记住,控制器方法依赖通过Laravel服务容器注入:
namespace App\Http\C
use Illuminate\Http\R
use App\Http\Controllers\C
class UserController extends Controller{
* 显示指定用户的属性
* @return Response
public function showProfile(Request $request, $id)
$value = $request-&session()-&get('key');
从session中获取数据的时候,还可以传递默认值作为第二个参数到
方法,默认值在指定键在session中不存在时返回。如果你传递一个闭包作为默认值到
方法,该闭包会执行并返回执行结果:
$value = $request-&session()-&get('key', 'default');
$value = $request-&session()-&get('key', function() {
return 'default';
如果你想要从session中获取所有数据,可以使用
$data = $request-&session()-&all();
还可以使用全局的PHP函数
来获取和存储session中的数据:
Route::get('home', function () {
// 从session中获取数据...
$value = session('key');
// 存储数据到session...
session(['key' =& 'value']);
判断session中是否存在指定项
方法可用于检查数据项在session中是否存在。如果存在的话返回
if ($request-&session()-&has('users')) {
在session中存储数据
获取到session实例后,就可以调用多个方法来与底层数据进行交互,例如,
方法存储新的数据到session中:
$request-&session()-&put('key', 'value');
推送数据到数组session
方法可用于推送数据到值为数组的session,例如,如果
user.teams
键包含团队名数组,可以像这样推送新值到该数组:
$request-&session()-&push('user.teams', 'developers');
获取并删除数据
方法将会从session获取并删除数据:
$value = $request-&session()-&pull('key', 'default');
从session中删除数据项
方法从session中移除指定数据,如果你想要从session中移除所有数据,可以使用
$request-&session()-&forget('key');
$request-&session()-&flush();
重新生成Session ID
如果你需要重新生成session ID,可以使用
regenerate
$request-&session()-&regenerate();
2.1 一次性数据
有时候你可能想要在session中存储只在下个请求中有效的数据,可以通过
方法来实现。使用该方法存储的session数据只在随后的HTTP请求中有效,然后将会被删除:
$request-&session()-&flash('status', 'Task was successful!');
如果你需要在更多请求中保持该一次性数据,可以使用
方法,该方法将所有一次性数据保留到下一个请求,如果你只是想要保存特定一次性数据,可以使用
$request-&session()-&reflash();
$request-&session()-&keep(['username', 'email']);
3、添加自定义Session驱动
要为Laravel后端session添加更多驱动,可以使用Session门面上的
方法。可以在服务提供者的
方法中调用该方法:
namespace App\P
use App\Extensions\MongoSessionS
use Illuminate\Support\ServiceP
class SessionServiceProvider extends ServiceProvider{
* Perform post-registration booting of services.
* @return void
public function boot()
Session::extend('mongo', function($app) {
// Return implementation of SessionHandlerInterface...
return new MongoSessionS
* Register bindings in the container.
* @return void
public function register()
需要注意的是自定义session驱动需要实现
SessionHandlerInterface
接口,该接口包含少许我们需要实现的方法,一个MongoDB的实现如下:
namespace App\E
class MongoHandler implements SessionHandlerInterface{
public function open($savePath, $sessionName) {}
public function close() {}
public function read($sessionId) {}
public function write($sessionId, $data) {}
public function destroy($sessionId) {}
public function gc($lifetime) {}
由于这些方法并不像缓存的
StoreInterface
接口方法那样容易理解,我们接下来快速过一遍每一个方法:
&方法用于基于文件的session存储系统,由于Laravel已经有了一个&
&session 驱动,所以在该方法中不需要放置任何代码,可以将其置为空方法。
&方法一样,也可以被忽略,对大多数驱动而言都用不到该方法。
&方法应该返回与给定$sessionId&相匹配的session数据的字符串版本,从驱动中获取或存储session数据不需要做任何序列化或其它编码,因为Laravel已经为我们做了序列化。
&方法应该讲给定
&写到持久化存储系统相应的
$sessionId
&, 例如MongoDB, Dynamo等等。
&方法从持久化存储中移除&
$sessionId
&对应的数据。
&方法销毁大于给定$lifetime&的所有&session数据,对本身拥有过期机制的系统如&Memcached&和Redis而言,该方法可以留空。
session驱动被注册之后,就可以在配置文件
config/session.php
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致Laravel5里的Session怎么调用_百度知道
Laravel5里的Session怎么调用
我有更好的答案
:get(key)Session::put(keySession
其他类似问题
为您推荐:
session的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁laravel框架session使用教程-Php框架模板-Php教程-壹聚教程网laravel框架session使用教程
laravel是一款php框架了,小编在使用laravel时会碰到session使用问题了,在使用过程中碰到一些问题与一些应用的例子,下面和各位一起来了解一下。
用Laravel开发应用,把原有的代码copy过来,以前的代码session使用了$_SESSION,本以为移植过来可以很好的运行的,因为没有依赖其他的组件,结果出现了这个
Undefined variable: _SESSION
Laravel的session的配置文件配置在 app/config/session.php 中,使用时可以看看 session 配置文件中可用的选项设定及注释。
Laravel 默认使用 file 的方式来实现 session的。她并不用php原生的$_SESSION(php原生的session要看php.ini的位置),所以忽略php相关的session函数,例如session_start(), $_SESSION。Laravel在运行过程中会在app/storage/session/目录写入session的信息,所以这个目录需要有写权限,否者session就无法写入成功。
Laravel除了使用默认的file作为session的实现,还支持cookie, Memcached, Redis 和的后端驱动作为session的实现。必要的时候还需要自己实现一个session的实现方式,比如在微信公众账号和用户的交互,这中session就无法直接使用,因为每次都是微信服务器来请求,无法通过请求的来源来辨别用户。
laravel的session简要API
Session的API还是比较简单的,大家看看中文文档也大概知道是怎么个意思。但是有那么几个还不太好理解。
//session的永久保存(在不过期范围内)
Session::put('key', 'value');
//等同于PHP的原生session
$_SESSION['key'] = 'value';
$value = Session::get('key', 'default');
//去除操作并删除,类似pop概念
$value = Session::pull('key', 'default');
//检测是否存在key
Session::has('users');
Session::forget('key');
这个对应只要session不过期,基本上是永久保存,下次http请求也是存在的。不同于下面的flash概念。
laravel的session中flash概念
但是Laravel出了个快闪flash的概念,把我一下子给搞混了。这个flash两次请求有效(本次和下次请求有效),与本次请求取操作多少次无关。
//保存key,value
Session::flash('key', 'value');
//取值方法还是一样的
Session::get('key');
//刷新快闪数据时间,保持到下次请求
Session::keep(array('username', 'email'));
这个flash的概念和上面的put的概念不太一样。
put :这个对应只要session不过期,基本上是永久保存,下次请求也是存在的。
flash :保存的值,本次请求可以使用,下次http请求可以使用,再下一次就不存在了。
也就是说下一次的请求用完就被销毁了,不会让session的值变的越来越大,可以保存一些临时的数据。
这中情况的使用场景比如有:
用户请求了页面,出现错误信息,重定向到一个新的页面,需要展示之前的数据。(虽然可以通过url参数来传递,处理不好可能会有xss漏洞)。
用户访问了一个页面,过滤器发现没权限,保存当前页面url,重定向到登录页面,登录成功,取出值,重定向到原先的页面。(这里可能需要刷新保存的快闪数据)
session落地的时间
我天真的以为使用了Session::put函数就能保存这个变量了。于是我的代码这样写:
class LoginController {
&&& public function login(){
&&&&&&& Session::put('key','value');
&&&&&&& print_r( Session::all() ); //取出来看看是否put成功
&&&&&&&&& //习惯性的调试都exit,不执行后续代码
&&&&&&& //return Redirect::to(/); 框架在return后还会有后续的代码执行的
结果下次请求就是找不到本次的Session,而且看app/storage/session目录就是没有文件生成。总感觉不对劲啊。
后来看到网络上有个方法Session::save(),于是我也用了下,居然发现成功的生成了session的文件。于是我感觉到,Laravel不用php原生的session,那么在controller之后应该做了一些事情,将session写入到文件中,而不是每次put操作都写操作,这样会IO操作太频繁的,影响性能的。
查看调用相关的代码。laravel编译后,在bootstrap/compiled.php中
class Middleware implements HttpKernelInterface
&&& public function handle(Request $, $type = HttpKernelInterface::MASTER_REQUEST, $ = true)
&&&&&&& $this-&checkRequestForArraySessions($request);
&&&&&&& if ($this-&sessionConfigured()) {
&&&&&&&&&&& $session = $this-&startSession($request); // 启动session
&&&&&&&&&&& $request-&setSession($session);
&&&&&&& $response = $this-&app-&handle($request, $type, $catch); // 调用controller的method
&&&&&&& if ($this-&sessionConfigured()) {
&&&&&&&&&&& $this-&closeSession($session);&&&&&&&& //关闭session
&&&&&&&&&&& $this-&addCookieToResponse($response, $session);
&&&&&&& return $
&&& 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里面写了,那么session是不会被保存的,除非主动的写Session::save()才能手工的保存起来。因此在debug调试的时候千万要注意啊。
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 laravel5.1 session 的文章

 

随机推荐