Maison > développement back-end > tutoriel php > Comment créer une session en PHP

Comment créer une session en PHP

墨辰丷
Libérer: 2023-03-30 12:00:02
original
6131 Les gens l'ont consulté

Cet article présente principalement comment créer une session en Php. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Recommandations de sujets connexes : session php (incluant des images, des vidéos, des cas pratiques)

Démarrez la session et créez une variable $admin :

// 启动 session session_start(); 
// 声明一个名为 admin 的变量,并赋空值。 
$_session["admin"] = null; 
?>  
Copier après la connexion

Si vous utilisez Session, ou si le fichier PHP veut appeler la variable Session, vous devez la démarrer avant d'appeler la Session, en utilisant la fonction session_start(). Vous n’avez rien d’autre à définir, PHP crée automatiquement le fichier de session.

Après avoir exécuté ce programme, nous pouvons accéder au dossier temporaire du système pour trouver le fichier de session. Le nom général du fichier est sous la forme : sess_4c83638b3b0dbf65583181c2f89168ec, suivi d'une chaîne aléatoire codée en 32 bits. Ouvrez-le avec un éditeur et jetez un œil à son contenu :

admin|N;
Copier après la connexion

Structure générale du contenu :

Nom de la variable : longueur :

et séparez chaque variable par un point-virgule. Certains peuvent être omis, comme la longueur et le type.

Jetons un coup d'œil à la procédure de vérification. Supposons que la base de données stocke le nom d'utilisateur et le mot de passe crypté md5 :

// 表单提交后...   
$posts = $_POST; 
// 清除一些空白符号 
foreach ($posts as $key => $value) 
{ 
$posts[$key] = trim($value); 
} 
$password = md5($posts["password"]); 
$username = $posts["username"]; 
$query = "SELECT `username` FROM `user` WHERE `password` = '$password'"; 
// 取得查询结果 
$userInfo = $DB->getRow($query); 
if (!emptyempty($userInfo)) 
{ 
if ($userInfo["username"] == $username) 
{ 
// 当验证通过后,启动 session 
session_start(); 
// 注册登陆成功的 admin 变量,并赋值 true 
$_SESSION["admin"] = true; 
} 
else 
{ 
die("用户名密码错误"); 
} 
} 
else 
{ 
die("用户名密码错误"); 
}
Copier après la connexion

Nous démarrons la session sur la page qui nécessite une vérification de l'utilisateur pour déterminer. s'il faut se connecter :

// 防止全局变量造成安全隐患 
$admin = false; 
// 启动会话,这步必不可少 
session_start(); 
// 判断是否登陆 
if (isset($_SESSION["admin"]) && $_SESSION["admin"] == true) 
{ 
echo "您已经成功登陆"; 
} 
else 
{ 
// 验证失败,将 $_session["admin"] 置为 false 
$_SESSION["admin"] = false; 
die("您无权访问"); 
} 
?>
Copier après la connexion

N'est-ce pas très simple ? Pensez simplement à $_session comme à un tableau stocké côté serveur. Chaque variable que nous enregistrons est la clé du tableau, ce qui n'est pas différent. d'utiliser un tableau.

Que faire si vous souhaitez vous déconnecter du système ? Détruisez simplement la session.

<?php 
session_start(); 
// 这种方法是将原来注册的某个变量销毁 
unset($_SESSION["admin"]); 
// 这种方法是销毁整个 session 文件 
session_destroy(); 
?>
Copier après la connexion

Session peut-elle définir le cycle de vie comme Cookie ? Avec Session, Cookie sera-t-il complètement abandonné ? Je dirais qu'il est plus pratique d'utiliser Session en combinaison avec Cookie.

Comment la session détermine-t-elle l'utilisateur client ? Il est déterminé par l'ID de session. Quel est l'ID de session ? L'ID de session est généré de manière aléatoire, il peut donc être garanti. être unique, sexuel et aléatoire pour assurer la sécurité de la session. Généralement, si le cycle de vie de la session n'est pas défini, l'ID de session est stocké dans la mémoire. Après la fermeture du navigateur, l'ID est automatiquement déconnecté. Après une nouvelle demande de page, un nouvel ID de session est enregistré.

Si le client ne désactive pas les cookies, le cookie joue le rôle de stockage de l'ID de session et de la durée de vie de la session lors du démarrage de la session de session. Définissons manuellement la durée de vie de la session :

session_start(); 
// 保存一天 
$lifeTime = 24 * 3600; 
setcookie(session_name(), session_id(), time() + $lifeTime, "/"); 
?>  
Copier après la connexion

En fait, Session fournit également une fonction session_set_cookie_params(); pour définir la durée de vie de la Session. Cette fonction doit être appelée avant que la fonction session_start() ne soit exécutée. appelé :

// 保存一天 
<?php 
$lifeTime = 24 * 3600; 
session_set_cookie_params($lifeTime); 
session_start(); 
$_session["admin"] = true; 
?>  
Copier après la connexion

Si le client utilise IE 6.0, la fonction session_set_cookie_params(); aura quelques problèmes pour définir les cookies, nous appelons donc toujours la fonction setcookie manuellement pour créer des cookies.

Et si le client désactive les cookies ? Il n'y a aucun moyen, tout le cycle de vie est le processus du navigateur. Tant que vous fermez le navigateur et demandez à nouveau la page, vous devez réenregistrer la session. Alors, comment transmettre l'ID de session ? Transmettez-le via l'URL ou via un formulaire caché. PHP enverra automatiquement l'ID de session à l'URL. L'URL est sous la forme : http://www.openphp .cn /index.php. ?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669, où Le paramètre PHPSESSID dans l'URL est l'ID de session Nous pouvons utiliser $_GET pour obtenir la valeur, transférant ainsi l'ID de session entre les pages.

// 保存一天 
<?php 
$lifeTime = 24 * 3600; 
// 取得当前 session 名,默认为 PHPSESSID 
$sessionName = session_name(); 
// 取得 session ID $sessionID = $_GET[$sessionName]; 
// 使用 session_id() 设置获得的 session ID 
session_id($sessionID); 
session_set_cookie_params($lifeTime); 
session_start(); 
$_session["admin"] = true; 
?>
Copier après la connexion

Pour les hôtes virtuels, si les sessions de tous les utilisateurs sont enregistrées dans le dossier temporaire du système, cela entraînera des difficultés de maintenance et réduira la sécurité. Nous pouvons définir manuellement le chemin d'enregistrement des fichiers de session, session_save_path(. ) fournit une telle fonction. Nous pouvons pointer le répertoire de stockage de session vers un dossier inaccessible via le Web. Bien entendu, le dossier doit avoir des attributs de lecture-écriture.

<?php 
// 设置一个存放目录 
$savePath = "./session_save_dir/"; 
// 保存一天 
$lifeTime = 24 * 3600; 
session_save_path($savePath); session_set_cookie_params($lifeTime); 
session_start(); 
$_session["admin"] = true; 
?>  
Copier après la connexion

Tout comme la fonction session_set_cookie_params();, la fonction session_save_path() doit également être appelée avant que la fonction session_start() ne soit appelée. Nous pouvons également stocker des tableaux et des objets en session. Il n'y a aucune différence entre utiliser un tableau et utiliser une variable générale. Lors de la sauvegarde d'un objet, PHP sérialisera automatiquement l'objet (également appelé sérialisation) puis l'enregistrera dans la session. L'exemple suivant illustre ce point :

<?php 
class person 
{ 
var $age; 
function output() 
{ 
echo $this->age; 
} 
function setAge($age) { 
$this->age = $age; 
} 
} 
?> 
setage.PHP 
<?php 
session_start(); 
require_once "person.PHP"; 
$person = new person(); 
$person->setAge(21); 
$_session[&#39;person&#39;] = $person; 
echo "check here to output age"; 
?> 
output.PHP 
<?php 
// 设置回调函数,确保重新构建对象。 
ini_set(&#39;unserialize_callback_func&#39;, &#39;mycallback&#39;); 
function mycallback($classname) { 
$classname . ".PHP"; 
} 
session_start(); 
$person = $_session["person"]; 
// 输出 21 
$person->output(); 
?>
Copier après la connexion

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.

Recommandations associées :

Méthode PHP pour obtenir la taille et la taille de l'image à distance

Boucle PHP double couche implémentation Table de multiplication

php appelle l'interface Express Bird

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal