Autor Zpráva
OndraS
Profil *
Zdravím, setkal sem se s php 4.0.1 a zlobí mi tu session.
Uživatel se přihlásí, vytvoří se session, ale na další stránce již tato session neexistuje, nefunguje...

Nevíte někdo co s tim?
Děkuji všem za odpovědi.

ps: kod je spravne.. použivam ho na php 5 normalne..
__construct
Profil
Ak používaš $_SESSION tak to je až od verzie 4.1.0 - predchodzie verzie používali $HTTP_SESSION_VARS
Majkl578
Profil
Teoreticky by mohlo fungovat $_SESSION =& $HTTP_SESSION_VARS; jako přechodné řešení, aby nebyla potřeba přepisovat scripty. Nicméně PHP verze 4.0.1 byla vydána 28. června 2000, což je skoro 10 let! Vysoce doporučuji přechod na novější PHP (alespoň verze 5.2.6, ideálně 5.3.2) a to i za cenu změny hostingu.
OndraS
Profil *
$HTTP_SESSION_VARS používám, ale stejne mi to nefunguje... jinak novější verzi php tam nechtej..:-(
__construct
Profil
Tak sem hoď kód ..
Joker
Profil
OndraS:
na další stránce již tato session neexistuje, nefunguje
Neexistuje session, nebo session existuje (tj. uživatel má stále relaci s daným ID), ale neexistuje ta proměnná v session?

jinak novější verzi php tam nechtej
Kde „tam“? Zkusil bych je nějak přimět, přece jen podpora celé PHP4 větve skončila na konci roku 2007 (poslední bezpečnostní aktualizace vyšla v srpnu 2008) a tohle je i na PHP4 archaická verze!
V opačném případě můžete na problémy tohohle typu narážet často.
OndraS
Profil *
No nevim jak zjistit že session existuje, ale vim že v proměnné kde má bejt není.:-)

postup přihlášení:
index.php (post) -> login.php -> index2.php


login.php:
<?php
 include "class/mysql.class.php";
 $mysql = new mysql();
 $mysql->pripojdb();
 session_start();
 if($_POST['jmeno'])
  {
    $query = $mysql->dotaz("select * from user where jmeno = \"$_POST[jmeno]\"");
    if($query)
    {
     $vypis = mysql_fetch_array($query);
     if($_POST['heslo'] == $vypis['heslo'])
        {
          session_register('user');
          session_register('level');
          $HTTP_SESSION_VARS['user'] = $vypis['jmeno'];
          
          header("location:index2.php");
          echo "ano";
        }                       
     else
     {
      session_register('error');
      $HTTP_SESSION_VARS['error'] = "Jméno nebo heslo nesouhlasí";
      //header("location:index.php");
     }
    }
   echo mysql_error();
  }
?>





Ověření přihlášeného uživatele na každé další str:
session_start();
if(!isset($HTTP_SESSION_VARS['user'])) header("location:/index.php");
if($HTTP_SESSION_VARS['level'] == 4) header("location:poruchy.php");
OndraS
Profil *
Jinak jde o madetu, ale jedná se pouze o interní sít jedné pobočky, takže ho podle nich nemá cenu měnit...
nightfish
Profil
- zkus v tom kódu zakomentovat všechny výskyty session_register
- session_start() dej hned na řádek č. 2
Joker
Profil
OndraS:
No nevim jak zjistit že session existuje
Tak session existuje vždycky, když tam je session_start. Ale šlo by ověřit, jestli to je pořád ta samá, tj. stejné session ID

Jinak nejen $_SESSION, ale i $_POST (a další superglobální pole: $_REQUEST, $_GET, $_COOKIE, $_SERVER, $_ENV) jsou k dispozici až od PHP 4.1
nightfish
Profil
Joker:
ale i $_POST jsou k dispozici až od PHP 4.1“
jaj, jaj, tato drobnost mě nenapadla
k [#9] tedy přidávám další odrážku:
- nahradit $_POST za $HTTP_POST_VARS
OndraS
Profil *
nightfish:
„ale i $_POST jsou k dispozici až od PHP 4.1“
jaj, jaj, tato drobnost mě nenapadla
k [#9] tedy přidávám další odrážku:
- nahradit $_POST za $HTTP_POST_VARS

Omlouvám se, zkopíroval jsem starou verzi. $HTTP_POST_VARS a get pouzivam.
Jinak děkuji za rady,hned jak to bude možné tak to skusím.

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: