Autor Zpráva
Enko
Profil *
Ahoj,
mám stránku která používá k držení dat SESSION se kterými následně pracuji. Vše funguje bezvadně do té doby než má uživatel vypnuté cookies. Pak se samozřejmě nemá podle čeho ověřovat SESSION. Jak se dá toto vyřešit? Jde nějak bezpečně předávat například SESSION identifikátor v $_GET?
Nebo jak se dá toto jinak řešit? Potřebuju jen skrytě přenášet data mezi stránkami.
Majkl578
Profil
Bezpečně ne. Při přenášení skrz URL jde o session fixation.
Enko
Profil *
Session fixation chápu. Ale když to nepoužívám k přihlášení uživatelů, ale jen k přenosu dat, která nejsou nijak tajná, tak to zas až tak ničemu nevadí, ne? :) Nechci totiž ty hodnoty přenášet jednotlivě v GET parametrech.
Enko
Profil *
Tak mám ještě jeden dotaz. Mám následující příklad.
Mám stránku kde si chci do $_SESSION[] ukládat nějaké informace. Uživatel však může mít vypnuté cookies, což mi způsobí, že Session identifikátor uložený v cookie neexistuje. Jak tedy postupovat dál? Hodnotu Session identifikátoru si získám ze session_id(), ale už nevím jak jí vrátit serveru aby mi na základě tohoto identifikátoru vrátil hodnoty uložených $_SESSION[]. Jak se v těchto případech postupuje?

Děkuji za každou radu :)
Davex
Profil
Enko:
Pro přenos identifikátoru se musí použít něco jiného než cookie, třeba parametr v adrese, ale bacha na to, aby se parametr neposílal robotům (pro ně nemá session smysl vytvářet a kazilo by to odkazy).
Enko
Profil *
Davex:
JJ todle vím :-) Nechápu ale ten princip. Do adresy ho dokážu dostat pomocí session_id(), ale nevím jak funguje ten princip, že server pozná že se jedná o Session ID. Nemáte prosím někde nějaký příklad?
Tori
Profil
Enko:
Do adresy ho dokážu dostat pomocí session_id()
Použijte spíš konstantu SID, ta vytvoří obsahuje i správný název GET parametru, který je v PHP pro session ID nastavený.
Enko
Profil *
Tori:
Luxus, děkuju. toto jsem přesně hledal.
Enko
Profil *
Tak se obracím opět s dotazem :-) Mám toto:
v .htaccess mám:
php_value session.use_trans_sid 1

a v php následující:
<?php

session_start();
//ověření zda již bylo přesměrováno k ověření SID z cookies
 if($_GET["r"] != "1" ){
   header("Location:sid.php?r=1");
   exit;
 }
//vytvoření session
if(!isset($_SESSION["i"])){$_SESSION["i"] = "12345";}

//ověření SID
if (!SID) {
  echo "<h1>Prohlizec ma povoleny cookies</h1>";
  echo "Session[i] je: " . $_SESSION["i"];
  }
else{
  header("Location:sidtest.php?" . SID);
  exit;
  }
?>

a v souboru sidtest.php mám:
<?php
  echo "<h1>Prohlizec nema povoleny cookies</h1>";
  echo "SID je: " . SID;
  echo "<br>Session[i] je: " . $_SESSION["i"] . "<br>";
  var_dump($_SESSION);
?>

A výsledek je, že pokud má uživatel zaplé cookies, tak se provede tato podmínka if (!SID) {... a v pořádku se vypíše obsah $_SESSION["i"]
Pokud je má vypnuté, tak se na stránku vypíše následující:
Prohlizec nema povoleny cookies
SID je: SID
Session je:
NULL


Což mi není jasné, proč se nepřenáší $_SESSION kdz6 v parametru adresy je vypsána konstatnta SID. Můžete m rpsím někdo poradit proč to tak je?

Děkuju
Tori
Profil
Enko
SID je: SID “ - tohle znamená, že konstanta SID není definovaná, takže se místo ní použije řetězec "SID" (zapněte si zobrazování chyb). Ve všech skriptech, které chtějí mít přístup k session, musí být na začátku session_start();. Asi PHP předpokládá, že když nestartujete session, tak s ní ani nechcete pracovat, takže ani nemusí nastavovat konstantu.
Enko
Profil *
Tori:
JJ, právě jsem na to přišel a šel jsem sem napsat, že to bylo tím, že mi chybělo session_start();

Díky :-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: