2011-02-20 13 views
5

मेरी साइट एक सूचकांक पेज, और उस पृष्ठ चेकों एक php सत्र के साथ सेट है, तो है:पीएचपी सत्र सफारी, वेबकिट रात में काम नहीं कर

session_start(); 

$name = $_SESSION["name"]; 

if (!$name) { 
    header('Location: name.php'); 
} 

name.php नाम सेट करने के लिए एक सरल फार्म (है कोई php), setName.php की एक क्रिया के साथ। setName.php:

session_start(); 

$_SESSION["name"] = $_POST["name"]; 

header('Location: index.php'); 

सफारी (और वेबकिट रात) को छोड़कर हर ब्राउज़र, उपयोगकर्ता को अपना नाम सेट करता है, और वापस सूचकांक करने के लिए लिया जाता है। हालांकि, एस (& डब्ल्यूएन) में नाम प्रपत्र सबमिट करना उसी पृष्ठ पर वापस लूप करता है।

कुकीज़ सभी साइटों के लिए सक्षम हैं, और सत्र id स्थापित किया जा रहा है: enter image description here

संपादित करें: मामले में यह किसी भी फर्क नहीं पड़ता, अपने सर्वर php 5.3 के साथ एक मैकबुक चल MAMP है।

यदि आप इसे स्वयं करना चाहते हैं, तो यूआरएल 121.73.150.105/questions है, लेकिन यह अक्सर ऑफ़लाइन होता है।

+0

यदि आप हेडर से पहले $ name और $ _SESSION ['name'] को प्रतिबिंबित करते हैं() क्या दिखाता है? कुछ भी? – TNC

+0

नाम जो मैंने रखा है! – JJJollyjim

+0

और जब मैं ताज़ा करता हूं तो यह रहता है! – JJJollyjim

उत्तर

3

यह ग नहीं हो सकता है अपनी परेशानियों की ause, लेकिन यहाँ क्या पीएचपी पुस्तिका के बारे में "स्थान" में क्या कहना है है:

HTTP/1.1 तर्क के रूप में एक निरपेक्ष यूआरआई »स्थान की आवश्यकता है: योजना, होस्ट नाम और निरपेक्ष पथ, लेकिन कुछ ग्राहकों सहित रिश्तेदार यूआरआई स्वीकार करें।

PHP manual

0

के बजाय: header('Location: index.php');

इस प्रयास करें: header('Location: index.php'); exit();

स्थान हैडर भेजने के बाद, पीएचपी पार्स जारी रहेगा, अभी भी शेष पृष्ठ पर अमल होगा। इसका मतलब यह हो सकता है कि आपके $ _SESSION डेटा को उस समय तक सहेजा नहीं जा सकता जब आपको इसकी आवश्यकता हो। निकास को मजबूर करना इसे ठीक करना चाहिए।

+0

नहीं। यह काम नहीं करता है :(यह हमेशा के लिए सेटनाम पर रहता है, और यदि मैं इंडेक्स पर जाता हूं, तो यह मुझे वापस नाम पर ले जाता है। – JJJollyjim

0

@ जेजे 56, यहां कोड है जो मैंने कोशिश की थी जब आप इसे आजमा रहे थे।

index.php

<?php 

session_start(); 

$name = $_SESSION["name"]; 

if (!$name) { 
    exit(header('Location: name.php')); 
} 

echo "Name is $name."; 

?> 

name.php

<!doctype html> 
<html> 
    <head> 
    <title>Questions Test</title> 
    </head> 
    <body> 
    <form method="post" action="setName.php"> 
     <input type="text" name="name"> 
     <input type="submit" name="submit"> 
    </form> 
    </body> 
<html> 

setName.php

<?php 

session_start(); 

$_SESSION["name"] = $_POST["name"]; 

header('Location: index.php'); 

?> 
0

ध्वनि PHPSESSID कुकी के साथ एक समस्या की तरह।
फॉर्म, लिंक और आईफ्रेम के लिए यह php के फ़ॉलबैक तंत्र द्वारा हल किया जाता है: url_rewriter.tags

हालांकि, (स्थान :) http शीर्षलेखों को मैन्युअल रूप से किया जाना चाहिए।

header('Location: name.php?'.htmlspecialchars(SID)); 

कहाँ php का SID निरंतर मूल रूप से एक session_name().'='.session_id()
अधिक जानकारी के लिए "PHP: Passing the Session ID" मैनुअल पृष्ठ देखें।

यह न केवल वेबकिट बग को ठीक करता है, बल्कि कुकीज अक्षम होने पर भी आपकी वेबसाइट अन्य ब्राउज़रों में काम करता है।

शीर्षक में session_id गुजर बिना() साइट तो thats क्यों ini.session.use-cookies = 0(के रूप में टिप्पणी में सुझाव दिया) सभी ब्राउज़रों का कारण बनता है काम करना बंद करने के लिए कुकीज़ पर निर्भर करता है।

0

कोशिश:

if (!$name) { 
    session_write_close(); 
    header('Location: name.php'); 
} 
0
अपने स्थान के लिए

, के बजाय "हैडर ('स्थान: name.php');" पूरे स्थान पते का उपयोग करने का प्रयास करें: 'स्थान: http://...name.php' वेब पते के http://...ect भाग को शामिल करना सुनिश्चित करें।

0

सफारी (और वेबकिट नाइटली) को छोड़कर हर ब्राउज़र में, उपयोगकर्ता अपना नाम सेट करता है, और उसे सूचकांक में वापस ले जाया जाता है। हालांकि, एस (& डब्ल्यूएन) में नाम प्रपत्र सबमिट करना उसी पृष्ठ पर वापस लूप करता है।

शायद यह आपका PHP नहीं है, बल्कि आपके फॉर्म का HTML है। क्या आप इसे यहां पोस्ट करना चाहते हैं?

संबंधित मुद्दे