अपने विज़िटर को पेज-दर-पेज याद रखें: सुरक्षित लॉगिन, सेशन-आधारित शॉपिंग कार्ट, और ठीक से सुरक्षित कुकी।
इस पाठ को Kodokon में खोलेंHTTP कुछ भी याद नहीं रखता: हर रिक्वेस्ट नई आती है, पिछली से किसी संबंध के बिना। सेशन इस समस्या को हल करते हैं: session_start() विज़िटर को एक विशिष्ट पहचानकर्ता से जोड़ता है, जो एक कुकी में प्रेषित होता है, और एक भंडारण स्थान से सर्वर की ओर जो $_SESSION के माध्यम से पहुँच योग्य है। हर संबंधित पेज के बिल्कुल शीर्ष पर, किसी भी आउटपुट से पहले, session_start() को कॉल करें।
<?php
declare(strict_types=1);
session_start();
$storedHash = password_hash('secret123', PASSWORD_DEFAULT);
$password = $_POST['password'] ?? '';
if (password_verify($password, $storedHash)) {
session_regenerate_id(true);
$_SESSION['user_id'] = 42;
header('Location: /account.php');
exit;
}
echo "Invalid credentials.";किसी पेज की सुरक्षा करना सेशन में उपयोगकर्ता की उपस्थिति की जाँच करने, और अन्यथा रीडायरेक्ट करने पर आ जाता है। सेशन एक शॉपिंग कार्ट के लिए आदर्श अस्थायी भंडारण के रूप में भी काम करता है: एक साहचर्य ऐरे product id => quantity पेज-दर-पेज बना रहता है।
<?php
declare(strict_types=1);
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: /login.php');
exit;
}
$_SESSION['cart'] ??= [];
$productId = filter_input(
INPUT_POST,
'product_id',
FILTER_VALIDATE_INT
);
if (is_int($productId)) {
$qty = $_SESSION['cart'][$productId] ?? 0;
$_SESSION['cart'][$productId] = $qty + 1;
}
$count = array_sum($_SESSION['cart']);
echo "Cart: " . $count . " item(s)";दूसरी ओर, कुकी उपयोगकर्ता के डिवाइस पर रहती हैं और ब्राउज़र बंद करने के बाद भी बनी रहती हैं: किसी थीम या भाषा की पसंद के लिए बिल्कुल उपयुक्त। PHP 7.3 से, setcookie() विकल्पों का एक ऐरे स्वीकार करता है: secure (केवल HTTPS), httponly (JavaScript के लिए अदृश्य), और samesite (अन्य साइटों से भेजने को सीमित करता है) की माँग करें।
<?php
setcookie('theme', 'dark', [
'expires' => time() + 60 * 60 * 24 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
$theme = $_COOKIE['theme'] ?? 'light';
echo "Active theme: " . $theme;लॉगआउट उतनी ही सावधानी से करना चाहिए जितनी लॉगिन: $_SESSION खाली करें, सर्वर की ओर सेशन नष्ट करें, और उस कुकी की समय-सीमा समाप्त करें जो पहचानकर्ता ले जाती थी।
<?php
session_start();
$_SESSION = [];
session_destroy();
setcookie(session_name(), '', time() - 3600, '/');
header('Location: /login.php');
exit;