Oturum değişkenleri set ama almıyorum sadece Internet Explorer ve tüm makinelerde

2 Cevap php

Benim yerel makinede bekleniyor ama uzak sunucuda ama sadece Internet Explorer'da başarısız gibi fonksiyonlar üzerinde çalışıyorum bir siteye oturum. Kicker bu uzak makinede sadece, yerel IE değil çalışır.

Ne dünyada, bu neden olabilir? Ben uzak makinede kod boyunca adım atmış ve veritabanında kontrol ediliyor girilen giriş değerleri, buldukları ve sonra bir giriş işlevi denir görebilirsiniz. Bu iki $ _SESSION değişkenlerini ayarlar ve ana yönetici sayfasına yönlendirir. Ancak sadece IE $ _SESSION değişkenleri ana yönetici sayfasına gitmek zaman mevcut değildir (yerel makinede çalıştırmak değil ... Bu anahtar). var_dump($_SESSION) uzak sunucuda (çalıştırdığınızda benim yerel çevre ve IE 6, 7 ve 8 dışında her tarayıcıda bu çalıştırırken her tarayıcısında beklediğiniz bana veriyor ben sanki bir null değeri nereden hiçbir $ _SESSION) için kuruldu.

Bu gerçekten beni çok herhangi bir tavsiye takdir şaşkına gelmiştir.

Bir ... Örneğin IE, yerel olarak çalışan, var_dump bana verir:

array
'Username' => string 'theusername' length=11
'UserID'   => string 'somevalue' length=9

Uzak sunucuda çalıştırın (IE sadece ... diğer tarayıcılarda çalışıyor) var_dump bana verir:

array(0){}

Kod (minimal bir örnek ... gerçekten bir kod örneği, bu konu ile gerekli olmasa da):

$User = GetUser($Username, $Password);
    if ($User->UserID <> "") { // this works so we call Login()...
        Login($User); // this also works and gives expected results. on to redirect...
        header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely.
    } else {
        header("Location: login.php");
    }


function Login($data) {
        $_SESSION['Username'] = $data->Username;
        $_SESSION['UserID'] = $data->UserID;
// a var dump here gives the expected data in every browser
    }

EDIT: bu çözüldü. Bu test sunucusu üzerinde alan adı içinde bir çizgi vardı olmasıydı. Şu anda bunun için Google'a zaman var ama some_client.ourcompany.com gibi bir şey adlı çizgi, sorun yok neden ve hiçbir fikrim yok. Gotta Internet Explorer seviyorum ... bu sadece önlemek değil bir pasif agresif meslektaş gibi.

2 Cevap

Daha kolay bulmak için yapmak için (kullanıcı Tuzo tarafından önerilen) bir cevap olarak bu koyarak. Bu çözüldü. Bu test sunucusu üzerinde alan adı içinde bir çizgi vardı olmasıydı. Şu anda bunun için Google'a zaman var ama some_client.ourcompany.com gibi bir şey adlı çizgi, sorun yok neden ve hiçbir fikrim yok. Gotta Internet Explorer seviyorum ... bu sadece önlemek değil bir pasif agresif meslektaş gibi.

Taken from another SO answer... explains exactly what's going on: Does one of the subdomains use an underscore ? IE has problems accepting cookies from subdomain's that dont follow the URI RFC. (http://www.ietf.org/rfc/rfc2396.txt)

Php.ini dosyasında session.cookie_domain değerini kontrol edin. Bu değer ayarlanırsa, bu ne beklediğiniz emin olun. Ben uzaktan kumanda vs lokal farklı davranırlar hangi aklınıza gelebilecek en büyük şey.

Ayrıca, session.cookie_lifetime ayarlanmış bir değer varsa, php.ini üzerinden bu hat yorumlama deneyin. Ben orada bir değerini düşürdü zaman IE ile bazı tuhaf davranışları gördüm.

İşte şipşak oturum denetleyicisi bulunuyor. Eğer sayfayı yeniden ve belirteci için yeni değerleri görmeye devam ederseniz, kalıcı bir oturumu alamayacaksın. Sonra kesinlikle sunucu / PHP config değil kodunuzu suçlayamaz.

<?php
session_start();
if (!isset($_SESSION['token'])) {
    $_SESSION['token'] = sha1(uniqid(rand(), true));
}

if (!empty($_POST)) {
  $_SESSION['hi'] = preg_replace('/[^\w ]+/','',$_POST['hi']);
  header("Location: index.php");
  exit;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Session test</title>
</head>
<body>

<h1>How's that session doing?</h1>
<p>Message: <?=htmlspecialchars($_SESSION['hi'])?></p>
<p>Token: <?=htmlspecialchars($_SESSION['token'])?></p>


<form action="index.php" method="post">
<fieldset>
  <label for="hi">What do you have to say?</label>
  <input type="text" name="hi" id="hi">
  <input type="submit" value="Submit">
</fieldset>
</form>

</body>
</html>