Php सेशन आईडी कितना अनोखा है? मुझे विभिन्न चीजों से आभास हुआ कि मैंने पढ़ा है कि मुझे दो उपयोगकर्ताओं पर भरोसा नहीं करना चाहिए जो एक ही सत्रीय नहीं हो सकते हैं। क्या यह GUID नहीं है?
जवाबों:
Session_id को वास्तव में डुप्लिकेट किया जा सकता है, लेकिन संभावना बहुत कम है। यदि आपके पास उचित ट्रैफ़िक वाली वेबसाइट है, तो यह आपके वेब साइट के जीवन में एक बार हो सकता है, और एक सत्र के लिए केवल एक उपयोगकर्ता को परेशान करेगा।
जब तक आप बहुत उच्च यातायात वेबसाइट या बैंक उद्योग के लिए एक सेवा का निर्माण करने की उम्मीद नहीं करते, तब तक यह ध्यान देने योग्य नहीं है।
यह बहुत अनोखा नहीं है जैसा कि शिप किया गया है। डिफ़ॉल्ट कॉन्फ़िगरेशन में यह विभिन्न चीजों के हैश का परिणाम है, जिसमें गेटटाइमऑफडे का परिणाम भी शामिल है (जो कि बहुत अनोखा नहीं है), लेकिन यदि आप चिंतित हैं, तो आपको इसे / dev / urandom से कुछ एन्ट्रापी आकर्षित करने के लिए कॉन्फ़िगर करना चाहिए, जैसे
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
कोड में "php_session_create_id" का उपयोग वास्तविक एल्गोरिथ्म के लिए कर रहे हैं।
जोड़ने के लिए संपादित: वहाँ एक डीएफए यादृच्छिक-संख्या जनरेटर पीड द्वारा वरीयता प्राप्त है, usecs में समय के साथ मिश्रित। यह विशेष रूप से सुरक्षा के दृष्टिकोण से एक विशिष्ट विशिष्टता की स्थिति नहीं है । ऊपर एन्ट्रापी कॉन्फिग का उपयोग करें।
अपडेट करें:
अगर यह उपलब्ध है तो PHP 5.4.0 session.entropy_file की डिफ़ॉल्ट रूप से / dev / urandom या / dev / arandom में चूक हो जाती है। PHP 5.3.0 में यह निर्देश डिफ़ॉल्ट रूप से खाली है। PHP मैनुअल
यदि आप जानना चाहते हैं कि कैसे PHP Github पर स्रोत कोड को डिफ़ॉल्ट रूप से एक सत्र आईडी बनाता है । यह निश्चित रूप से यादृच्छिक नहीं है और इन सामग्रियों के हैश (डिफ़ॉल्ट: md5) पर आधारित है (कोड स्निपेट की पंक्ति 310 देखें):
यदि ओएस में एक यादृच्छिक स्रोत उपलब्ध है, तो सत्र आईडी होने के उद्देश्य के लिए उत्पन्न आईडी की ताकत अधिक है ( / देव / यूरेनियम और अन्य ओएस यादृच्छिक स्रोत आमतौर पर क्रिप्टोग्राफिक रूप से सुरक्षित PRNGs हैं )। यदि फिर भी ऐसा नहीं होता है तो यह संतोषजनक है।
सत्र पहचान निर्माण के साथ लक्ष्य यह है:
यह PHP के सत्र पीढ़ी के दृष्टिकोण द्वारा प्राप्त किया गया है।
आप पूरी तरह से विशिष्टता की गारंटी नहीं दे सकते हैं , लेकिन संभावनाएं एक ही हैश को दो बार मारने की इतनी कम हैं कि यह आम तौर पर बोल रहा है, जिसके बारे में चिंता करने योग्य नहीं है।
यदि आप आईडी जनरेट करने के तरीके को अनुकूलित करना चाहते हैं तो आप एक वैकल्पिक हैश जेनरेशन फ़ंक्शन इंस्टॉल कर सकते हैं (यह डिफ़ॉल्ट रूप से एमडी 5 के माध्यम से उत्पन्न 128 बिट नंबर है)। Http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function देखें
PHP सत्रों के बारे में अधिक जानकारी के लिए, यह उत्कृष्ट लेख http://shiflett.org/articles/the-truth-about-session देखें जो सत्र निर्धारण और अपहरण के बारे में अन्य लेखों से भी जुड़ता है।
Session_id का आकार मान लें कि seeion_id समान रूप से वितरित किया गया है और इसका आकार = 128 बिट्स है। मान लें कि ग्रह पर प्रत्येक व्यक्ति एक दिन में एक बार 1000 वर्षों के लिए एक नए सत्र के साथ लॉग इन करता है।
num_sesion_ids = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36) ≈ 1 - e**-(1/2**46)
≈ 1/2**46
तो एक या अधिक टकराव की संभावना 70 हजार अरबों में एक से कम है। इसलिए सत्र का एक 128-बिट-आकार काफी बड़ा होना चाहिए। जैसा कि अन्य टिप्पणियों में उल्लेख किया गया है, session_manager यह भी जाँच सकता है कि नया session_id पहले से मौजूद नहीं है।
रैंडमनेस
इसलिए बड़ा सवाल मुझे लगता है कि क्या session_id: s अच्छे छद्म यादृच्छिकता के साथ उत्पन्न होते हैं। उस पर आप कभी भी निश्चित नहीं हो सकते हैं, लेकिन मैं इस उद्देश्य के लिए एक प्रसिद्ध और अक्सर उपयोग किए जाने वाले मानक समाधान का उपयोग करने की सलाह दूंगा (जैसा कि आप शायद पहले से ही करते हैं)।
यहां तक कि अगर टकराव की वजह से टकराव से बचा जाता है, तो random_ness और session_id का आकार महत्वपूर्ण है, ताकि हैकर्स किसी भी तरह से योग्य अनुमान न लगा सकें और सक्रिय session_id ढूंढ सकें: बड़ी संभावना के साथ।
मुझे इस पर कोई पुष्टि नहीं मिली है, लेकिन मेरा मानना है कि अगर किसी आईडी को उस आईडी के साथ बनाने से पहले एक सत्र आईडी मौजूद है।
सत्र अपहरण का मुद्दा लोगों को चिंतित करता है जब कोई व्यक्ति किसी सक्रिय उपयोगकर्ता के सत्र आईडी का पता लगाता है। इसे कई तरीकों से रोका जा सकता है, अधिक जानकारी के लिए आप इस पेज को php.net पर देख सकते हैं और सत्र निर्धारण पर यह पेपर
नहीं, सत्र आईडी GUID नहीं है, लेकिन दो उपयोगकर्ताओं को समान सत्र आईडी नहीं मिलनी चाहिए क्योंकि वे सर्वर साइड पर संग्रहीत हैं।
<?php
session_start();
$_SESSION['username']="username";
?>
<!DOCTYPE html>
<html>
<head>
<title>Update</title>
</head>
<body>
<table border="2">
<tr>
<th>Username</th>
<th>Email</th>
<th>Edit</th>
</tr>
<?php
$conn=mysqli_connect("localhost","root","","telephasic");
$q2="select * from register where username = '".$_SESSION['username']."'";
$run=mysqli_query($conn, $q2);
while($row=mysqli_fetch_array($run))
{
$name=$row[1];
$email=$row[2];
?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $email; ?></td>
<td><a href="edit.php"> Edit </a></td>
</tr>
<?php } ?>
</table>
</body>
यदि आपका उपयोगकर्ता नाम अलग या विशिष्ट है, तो आप इस कोड का उपयोग सत्र के लिए कर सकते हैं