鍍金池/ 問答/PHP/ thinphp5怎么在入口文件里寫入session?

thinphp5怎么在入口文件里寫入session?

因?yàn)橄雱?chuàng)建多一個(gè)管理入口,這樣方便修改入口文件名字。

在 app\admin\contrller\Login 里寫了先判斷是否從入口進(jìn)入

Login:

<?php
namespace app\admin\controller;
use think\Controller;

class Login extends Controller
{
    public function index(){
        if (!session('AdminLogin')) {
            header("Content-Type:text/html; charset=utf-8");
            $this->error('請(qǐng)從后臺(tái)管理入口登錄');
        }
        if (session('app.USER_AUTH_KEY')) {
            $this->redirect(url('/admin'));
        }
        return view();
    }
}

目的是當(dāng)用戶訪問 admin.php 這個(gè)入口文件的時(shí)候,直接給一個(gè)session,這樣就能判斷是否從入口文件進(jìn)入的。
但是入口文件里不能直接使用 TP5 的 session() ,如果用 PHP 的$_SESSION

@session_start();
$_SESSION['AdminLogin'] = 1;

那樣 Login 里使用 session('AdminLogin') 就會(huì)無法獲取。
入口文件里應(yīng)該怎樣才能使用 tp5 的 session() ?

回答
編輯回答
心沉

你可以看看tp中session函數(shù)源碼, 是否有前綴.

2018年8月7日 21:53
編輯回答
心癌

因?yàn)?code>session()是之后加載的啊

2017年8月22日 16:11
編輯回答
念初

謝邀,題主的大概思路我了解了一下,想要確認(rèn)用戶的從哪個(gè)入口文件進(jìn)入,樓上的說的也都是正確的.@熊貓桑,@上官元恒 說的都是有道理的.但是我不是很贊成題主的想法,session函數(shù)是要自動(dòng)加載過后才能執(zhí)行的.它是在引入helper.php這個(gè)文件后才有,至于引入規(guī)則可以看一下\thinkphp\library\App.php中的init方法.所以要使用session函數(shù)可以在入口文件作出如下更改

$app = Container::get('app')->bind('模塊名');
$app->initialize();
// 這里寫你要用的session方法.
$app->run()->send();

來了,在app->run方法中,又執(zhí)行了一次initialize方法.就執(zhí)行了兩次initialize.這樣一個(gè)程序的執(zhí)行效率就低了.
那為什么不換一個(gè)思路.以下這個(gè)是我的思路.通過$_SERVER中的script_name來獲取對(duì)應(yīng)的入口文件名字.用于判斷用戶是否從入口文件進(jìn)入.

<?php
namespace app\admin\controller;
use think\Controller;

class Login extends Controller
{
    public function index(){
        if ($this->request->server('SCRIPT_NAME') != '/' . '入口文件名字如:admin.php') {
            header("Content-Type:text/html; charset=utf-8");
            $this->error('請(qǐng)從后臺(tái)管理入口登錄');
        }
        
        if (session('app.USER_AUTH_KEY')) {
            $this->redirect(url('/admin'));
        }
        return view();
    }
}
2017年9月24日 11:25
編輯回答
咕嚕嚕

謝邀,可我沒接觸過ThinkPHP……但我覺得session還是應(yīng)該放默認(rèn)控制器里吧?入口文件里放全局的東西就好。當(dāng)然如果能上RBAC之類的東西就最好~(這句不一定對(duì)。。)

2018年3月14日 14:48