Heim >Backend-Entwicklung >PHP-Tutorial >laravel框架,在客户端没有存cookie时如何处理比较好?

laravel框架,在客户端没有存cookie时如何处理比较好?

WBOY
WBOYOriginal
2016-06-06 20:43:331491Durchsuche

请问laravel框架,如果客户端那边没有cookie机制,只能靠sid来保持用户状态.这种情况下怎么弄才能保证session正常工作呢?

我现在项目直接在最前面弄个sid session_id($sid); 处理的,虽然能行,不过真的很烂啊. 头疼

例如做一个手机应用的api接口,这时候可能需要用户保持登录状态.可是我的安卓程序员说他们那边不想做cookie(说做不了).没办法只能在登录后把sid传给他们就当cookie,然后每次发请求过来的时候用sid开启session session_id($sid); 这样才能保证使用.

有没有更优雅写的方式处理这样的问题呢?这么做真的太难看了.而且可能会带出其他问题的.

回复内容:

请问laravel框架,如果客户端那边没有cookie机制,只能靠sid来保持用户状态.这种情况下怎么弄才能保证session正常工作呢?

我现在项目直接在最前面弄个sid session_id($sid); 处理的,虽然能行,不过真的很烂啊. 头疼

例如做一个手机应用的api接口,这时候可能需要用户保持登录状态.可是我的安卓程序员说他们那边不想做cookie(说做不了).没办法只能在登录后把sid传给他们就当cookie,然后每次发请求过来的时候用sid开启session session_id($sid); 这样才能保证使用.

有没有更优雅写的方式处理这样的问题呢?这么做真的太难看了.而且可能会带出其他问题的.

写一个BaseController.php

<code class="lang-php"><?php class BaseController {

    public function __construct() {
        // 把请求参数session_id载入session
        Session::setId(Input::get('session_id'));
    }
</code></code>

之后的Controller继承BaseController即可

<code class="lang-php"><?php class UserController extends BaseController {

    public function __construct() {
        parent::__construct();
        // 判断登陆
        $this->beforeFilter('@filterAuth');
    }

    public function filterAuth($route, $request) {
        $user = Auth::user();
        if (is_null($user)) {
            // 未登录
            return Redirect::guest('user/login');
        } else {
            // 已登录
        }
    }
</code>

记得每一次请求之后都把session_id Session::getId()注册到模版里面,或者附带在URL上面

laravel的session提供了多种存储方式,如果本地不支持cookie的话是可以存储到服务器端的数据库上的

具体设置在 app/config/session.php中将 'driver' => 'database',即可
在migrate中添加session数据库,具体做法 php artisan session:table

手机端也支持Cookie啊。怎么会不支持?难道是wap站- -#

URL全局参数吧- -#

叫他们参考一下 开源中国安卓客户端 的源码,里面有保存 Cookie 的方法。

PS:如果没记错的话,应该是在 net.oschina.app.api.ApiClient 这个类里面。


PS2:

可是我的安卓程序员说他们那边不想做cookie(说做不了).

这个安卓程序员是是什么情况?刚毕业的也不会说做不了吧?

对于你说的api的问题,可以使用token的形式,在laravel中只验证不登录,从而产生有期限的token,登录后将token传给客户端,然后客户端在以后的操作中,在头中带上token访问,当然,这种方式最好在https下使用。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:laravel下run phpunit错误Nächster Artikel:请教PHP 什么时候try catch