PHP: oturum başlığı yönlendirme önce tasarruf değildir

8 Cevap php

I have read through the php manual for this problem and it seems quite a common issue but i have yet to find a solution. I am saving sessions in a database. My code is as follows:

// session
$_SESSION['userID'] = $user->id;        
header('Location: /subdirectory/index.php');

Then at the top of index.php after the session_start(), i have var_dumped the $_SESSION global and the userID is not in there. As i said ive looked through the PHP manual (http://php.net/manual/en/function.session-write-close.php) and neither session_write_close or session_regenerate_id(true) worked for me. Does anybody know a solution?

Düzenleme: Ben dosyanın üstündeki () session_start var. I başlık yönlendirmenin önce küresel oturumu var_dump zaman, ben orada kullanıcı kimliği görmek değil, bu komut bir alt olan diğer dosyasında

Thanks, Matt

8 Cevap

I know this is an old toppic but I found the solution (for me). I've put a exit after the header.

$_SESSION['session'] = 'this is a session';
header('location: apage.php');
exit;

Bu benim için çalışıyor

@Matt (not able to comment yet...): If:
a) It appears in the session before redirect
b) other keys work

Zaman% 80 sorunun register_globals ve bir eşit olarak adlandırılan değişken $ kullanıcı kimliği kullanımı yerde (diğer% 19 sadece bir beklemediğini yerlerde üzerine.Yapıyor,% 1 / kilit oturumu yazamadığı için önce yönlendirme ve bayat veri , bu durumda could yönlendirme önce session_write_close ()) deneyin. Bu register_globals kapalı olması gerektiğini söylemeye gerek yok: P

Bir session_start var (); üst?

Test değil ama böyle bir şey yapamam:

session_start();
$_SESSION['userID'] = $user->id;
if( $_SESSION['userID'] == $user->id )
{  
    header('Location: /index.php');
}

Ben ilginç, daha önce bu sorunla asla

userID herhangi bir anahtar kelime statüye sahip değildir.

Benim için tek nedeni, $ _SESSION ['userID'] bir yere yazılır veya silinir ediliyor olduğunu.

Emin sen / oturumu erişmek eklemek istediğiniz tüm dosyaları session-> start () kullandığınızdan emin olun.

One important thing ( which may not be applicable in your case ) is, if the session is being handled using cookie, cookie can be made to be accessible only under certain directory and subdirectories under that. In your case anyhow, subdirectory will have access to the session.

Ben bu konuda duymamış, ama ben çok fazla oturumları kullanmamışlardır.

Oturumları ile bir kaç şey yapmak ve bir kaç ayar kurulum var ZORUNLU:

  • istemci tarafında etkin kurabiye
  • session_start (), before anything happens
  • (onlar çıkış istediğiniz sürece) emin oturumu yok yok olun
  • PHP session id aynı olmalıdır (çerezler ile ilgilidir)

Bir başka konu $ user-> id sonraki sayfada var olmayan bir nesneye bir başvuru dönüyor olabilir. Büyük olasılıkla değil, ama emin olun.

Ben kodu gördüm eğer ben size çok daha fazla yardımcı olabilir. Ama ayıklarken session_id () ile oturum anahtarını kontrol edin ve aynı olduğundan emin olun. Bunu deneyebilirsin sonra ben yardım tutmak söyle.

Ben de bu geri oturumları içine almak için ne zaman biter bilmek istiyorum.

Geçenlerde aynı sorun vardı. Ben okul için özelleştirilmiş bir MVC Web yazma ediyorum ve herkesin söylediği gibi, start_session () kodunun ilk satırlarda yazılmalıdır.

Benim sorunum "session_start ()" adlı YER oldu. Bu global denetleyici değil, görünümünün ilk satırları ilk satır olmalıdır. Sunucu görünümünü işlemek zaman sadece başlatıldı çünkü $ _SESSION denetleyicisinin dosyaları erişilebilir değildi.

Sonraki istek için oturum değişkenleri tutmak için çağrı: Sonra, ben ('xxx.php konumu') başlığından sonra () session_write_close kullanıyorum.

ex:

globalController.php:

//First line
session_start();
require_once('Model/Database.php');
require_once('Model/Shop/Client.php');
...

logonController.php:

...
//Users is validated and redirected.
$_SESSION['client'] = $client;
header('location: index.php');
session_write_close();

Bu sorunları çözdü umuyoruz.

Bu cehennem gibi can sıkıcı oldu ama sonunda bir çözüm anladım.

config.php i had: include 'session.php';

At the top of session.php, I had: session_start();

Config.php dosyası, viyola üstüne session_start () hareket ettirerek ...

Sorun çözüldü!

Senden önce session_name() vermeye çalışın session_start().

Ve anahtarı error_reporting(15) hataları görmek için.