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

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

因為想創(chuàng)建多一個管理入口,這樣方便修改入口文件名字。

在 app\admin\contrller\Login 里寫了先判斷是否從入口進入

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('請從后臺管理入口登錄');
        }
        if (session('app.USER_AUTH_KEY')) {
            $this->redirect(url('/admin'));
        }
        return view();
    }
}

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

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

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

回答
編輯回答
心沉

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

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

因為session()是之后加載的啊

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

謝邀,題主的大概思路我了解了一下,想要確認用戶的從哪個入口文件進入,樓上的說的也都是正確的.@熊貓桑,@上官元恒 說的都是有道理的.但是我不是很贊成題主的想法,session函數(shù)是要自動加載過后才能執(zhí)行的.它是在引入helper.php這個文件后才有,至于引入規(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.這樣一個程序的執(zhí)行效率就低了.
那為什么不換一個思路.以下這個是我的思路.通過$_SERVER中的script_name來獲取對應(yīng)的入口文件名字.用于判斷用戶是否從入口文件進入.

<?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('請從后臺管理入口登錄');
        }
        
        if (session('app.USER_AUTH_KEY')) {
            $this->redirect(url('/admin'));
        }
        return view();
    }
}
2017年9月24日 11:25
編輯回答
咕嚕嚕

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

2018年3月14日 14:48