Kodokon kodokon.com

सेशन और कुकी: लॉगिन और शॉपिंग कार्ट

अपने विज़िटर को पेज-दर-पेज याद रखें: सुरक्षित लॉगिन, सेशन-आधारित शॉपिंग कार्ट, और ठीक से सुरक्षित कुकी।

10 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

HTTP कुछ भी याद नहीं रखता: हर रिक्वेस्ट नई आती है, पिछली से किसी संबंध के बिना। सेशन इस समस्या को हल करते हैं: session_start() विज़िटर को एक विशिष्ट पहचानकर्ता से जोड़ता है, जो एक कुकी में प्रेषित होता है, और एक भंडारण स्थान से सर्वर की ओर जो $_SESSION के माध्यम से पहुँच योग्य है। हर संबंधित पेज के बिल्कुल शीर्ष पर, किसी भी आउटपुट से पहले, session_start() को कॉल करें।

PHP
<?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.";
login.php: वास्तव में, हैश आपके डेटाबेस से आता है।

किसी पेज की सुरक्षा करना सेशन में उपयोगकर्ता की उपस्थिति की जाँच करने, और अन्यथा रीडायरेक्ट करने पर आ जाता है। सेशन एक शॉपिंग कार्ट के लिए आदर्श अस्थायी भंडारण के रूप में भी काम करता है: एक साहचर्य ऐरे product id => quantity पेज-दर-पेज बना रहता है।

PHP
<?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)";
cart.php: एक सुरक्षित पेज और सेशन में संग्रहीत एक कार्ट।

दूसरी ओर, कुकी उपयोगकर्ता के डिवाइस पर रहती हैं और ब्राउज़र बंद करने के बाद भी बनी रहती हैं: किसी थीम या भाषा की पसंद के लिए बिल्कुल उपयुक्त। PHP 7.3 से, setcookie() विकल्पों का एक ऐरे स्वीकार करता है: secure (केवल HTTPS), httponly (JavaScript के लिए अदृश्य), और samesite (अन्य साइटों से भेजने को सीमित करता है) की माँग करें।

PHP
<?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
<?php

session_start();

$_SESSION = [];
session_destroy();

setcookie(session_name(), '', time() - 3600, '/');

header('Location: /login.php');
exit;
logout.php: एक पूर्ण लॉगआउट, कोई निशान छोड़े बिना।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. किसी PHP सेशन का डेटा कहाँ संग्रहीत होता है?
    • उपयोगकर्ता के डिवाइस पर एक कुकी में
    • सर्वर पर; ब्राउज़र केवल एक कुकी में एक पहचानकर्ता रखता है
    • हर पेज के URL में
    • ब्राउज़र के localStorage में
  2. किसी सफल लॉगिन के तुरंत बाद session_regenerate_id(true) क्यों कॉल करें?
    • सेशन फ़िक्सेशन को रोकने के लिए: लॉगिन से पहले ज्ञात कोई पहचानकर्ता अनुपयोगी हो जाता है
    • सेशन कुकी की अवधि बढ़ाने के लिए
    • पुराने कार्ट डेटा को साफ़ करने के लिए
  3. किसी कुकी का httponly विकल्प क्या करता है?
    • यह कुकी की सामग्री को एन्क्रिप्ट करता है
    • यह कुकी को असुरक्षित कनेक्शनों तक सीमित करता है
    • यह कुकी को पेज के JavaScript के लिए अगम्य बना देता है, जो XSS के माध्यम से चोरी को सीमित करता है