Session
ne prend pas en charge le fonctionnement du tableau $_SESSION, seule la classe Session peut être utilisée
La classe Session de 6.0 peut bien prendre en charge des environnements tels que Swoole/Workerman.
Open Session
La fonction Session n'est pas activée par défaut. Si vous devez utiliser Seesion, vous devez ajouter la définition de middleware suivante au fichier de définition de middleware global :
'think\middleware\SessionInit'
S'il s'agit d'un mode multi-application, et vous utilisez simplement Pour certaines applications, il peut également être activé séparément dans le fichier de définition du middleware d'application.
Initialisation de la session
Le système initialisera automatiquement la session en fonction des paramètres configurés dans session.php.
Les paramètres de configuration de session pris en charge par défaut incluent :
Paramètre | Description |
---|---|
type | session type |
store | Spécifier le stockage lorsque le type est défini sur le type de cache Logo |
expire | le délai d'expiration de la session (en secondes) doit être supérieur à 0 |
var_session_id | Request session_id variable name |
name | session_name |
prefix | session prefix |
sérialiser | séquence Méthode chimique |
Vous pouvez appeler directement les méthodes pertinentes de la classe Session sans aucune opération, telles que :
Session::set('name', 'thinkphp'); Session::get('name');
Sérialisation
Les données de session seront automatiquement sérialisées lorsqu'elles sont enregistrées, et automatiquement désérialisées lorsqu'elles sont lues. Définir le mécanisme de sérialisation.
Par exemple, configurez-le pour utiliser la sérialisation JSON dans le fichier de configuration :
'serialize' => ['json_encode', 'json_decode'],
Essayez d'éviter d'enregistrer des objets dans la session
Utilisation de base
Affectation
Session::set('name', 'thinkphp'); // 支持两级赋值 Session::set('user.name', 'thinkphp');
Déterminez s'il existe
Session::has('name'); Session::has('user.name');
Obtenez la valeur
// 如果值不存在,返回null Session::get('name'); // 如果值不存在,返回空字符串 Session::get('name', ''); // 支持多级 Session::get('user.name');
Delete
Session::delete('name');
Obtenez la valeur et supprimez
// 取值并删除 Session::pull('name');
Si la valeur de name n'existe pas, renvoyez Null.
Effacer
Session::clear();
Données Flash, valables avant la prochaine requête
// 设置session 并且在下一次请求之前有效 Session::flash('name','value');
Effacer à l'avance les données valides pour la requête en cours
// 清除当前请求有效的session Session::flush();
A noter que l'opération d'écriture des données en Session sera stockée localement à la fin de la requête, alors ne l'utilisez pas. L'utilisation d'opérations d'interruption telles que la sortie après l'écriture des données de session peut empêcher l'écriture de la session normalement.
Tableaux multi-niveaux
Prend en charge les opérations de tableau à plusieurs niveaux de session, telles que :
// 赋值(当前作用域) Session::set('name.item','thinkphp'); // 判断(当前作用域)是否赋值 Session::has('name.item'); // 取值(当前作用域) Session::get('name.item'); // 删除(当前作用域) Session::delete('name.item');
Les méthodes set et delete ne peuvent prendre en charge que les tableaux à deux niveaux, et d'autres méthodes prennent en charge les opérations de tableau à niveaux arbitraires.
Fonction assistant
Le système fournit également la fonction assistant session pour remplir la même fonction, par exemple :
// 赋值 session('name', 'thinkphp'); // 判断是否赋值 session('?name'); // 取值 session('name'); // 删除 session('name', null); // 清除session session(null);
Session de lecture dans l'objet Request
Les données de session peuvent être lues dans l'objet Request (le paramètre n'est pas pris en charge )
public function index(Request $request) { // 读取某个session数据 $request->session('user.name', ''); // 获取全部session数据 $request->session(); }
Mais les opérations d'écriture de session ne sont pas prises en charge dans la classe Request.
Session indépendante de l'application
Si vous utilisez le type de fichier par défaut, les chemins d'enregistrement de session de plusieurs applications sont les mêmes, ce qui signifie que les données de session sont partagées entre plusieurs applications. Si vous ne souhaitez pas partager les données de session, vous pouvez le faire. peut donner à chaque application un chemin différent ou un préfixe différent.
S'il s'agit du type de fichier, les données de session par défaut sont enregistrées dans le répertoire runtime/session. Vous pouvez définir le chemin pour modifier le chemin de stockage.
S'il s'agit d'un pilote d'autres types, vous pouvez définir le paramètre de configuration du préfixe pour distinguer les différentes données de session d'application.
Pilote de session
Le pilote de session par défaut utilise l'enregistrement du cache de fichiers et prend en charge la configuration suivante
Paramètre | Description |
---|---|
path | chemin de sauvegarde de session |
data_compress | Que ce soit pour compresser les données |
gc_divisor | Probabilité de recyclage GC |
gc_probability | Probabilité de recyclage GC |
gc_maxlifetime | Durée de vie maximale du recyclage GC |
En plus des types de fichiers, d'autres types de session peuvent également être pris en charge, tels que :
return [ 'type' => 'redis', 'prefix' => 'think', 'auto_start' => true, // redis主机 'host' => '127.0.0.1', // redis端口 'port' => 6379, // 密码 'password' => '', ]
signifie utiliser redis comme type de session.
Pour que la configuration ci-dessus prenne effet, veuillez vous assurer que la configuration du cache Redis a été ajoutée aux magasins dans le fichier de configuration du cache cache.php, par exemple :
return [ 'default' => 'file', 'stores' => [ // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ], ];
Les types actuellement intégrés pris en charge incluent redis, memcache et memcaché.
Pilote personnalisé
Si vous devez personnaliser le pilote de session, votre classe de pilote doit implémenter l'interface thinkcontractSessionHandlerInterface, qui contient trois méthodes.
interface SessionHandlerInterface { public function read(string $sessionId): string; public function delete(string $sessionId): bool; public function write(string $sessionId, string $data): bool; }
La méthode read est exécutée lorsque Session::start() est appelée et ne sera exécutée qu'une seule fois.
La méthode d'écriture est exécutée lors de la localisation des données de session (appel de la méthode Session::save()), et le système l'exécutera automatiquement à la fin de chaque requête.
La méthode delete est exécutée lorsque la session est détruite (appel de la méthode Session::destroy()).