Stránka 1 z 1

Problem se session

Napsal: úte 18. pro 2007, 11:22
od Vodny
Zdravim.

Mám nějakou práci do školy a potřebuju pomoct. První co mě zajímá jak moc velkej rozdíl je mezi skutečnym serverem (u mě webzdarma) a localhostem.
Jde o to že na local hostu mi vše funguje a když to nahraju na web zdarma tak to nejde. Mám tam registraci ta jde přihlášení se taky povede jenže když jako přihlášenej na něco kliknu tak se jakoby ta session ztratí fakt se mi to špatně popisuje ale můžete to zkusit jestli se nudíte. www.motocr.wz.cz

Nechápu jak to že to na localu běží a tam ne. Kde je nejspíš chyba?

Díky a omluvte to vysvětlení jsem meganas..... je to fakt pakárna

Napsal: úte 18. pro 2007, 11:33
od l_iNu$
U tebe a na serveru se samozřejmě může lišit verze PHP a jeho nastavení. Na což je potřeba dávat pozor.
A pokud zde ten tvůj problém nepopíšeš líp nebo neukážeš zdrojáky tak ti asi nikdo moc nepomůže.

Napsal: úte 18. pro 2007, 11:56
od Vodny
Tak to nevim páč nevim co by mohlo bejt důležitý a kde by se ta chyba mohla objevit.

Takže tohle je index.php
Tučně jsem zvýraznil jedinou změnu po přihlášení a ta se projeví pouze hned po zalogování ale při dalším procházeni stránky už proste tohle :
<?php
if ($_SESSION["uzivatel"])
{
include ("prihlasen.php");
}
else
{
include ("prihlaseni.php");
}

nefunguje. V tom session uzivatel je uložený jedinečnej login kterej je v DB.


Kód: Vybrat vše

<?php 
  session_start();     
?>

<?php 
  include ("hlavicka.php"); 
?>
  
<body>

<!-- Začátek Obalu --> 
    <div id="obal"> 
    
    <div id="head"></div> 
       
    <?php
      include ("menu.php");
    ?>
    
 <!-- Hlavní obsah stránky  -->                
      
        <div id="inzeraty">
                 
        <!-- Inzerát --> 
        <?php
                
        $stranka = $_GET["stranka"];
        
        switch ($stranka) 
        {
        
         case null:
            $odkaz = "inzerat.php";
            break; 
            
         case $stranka == "kontakt":
            $odkaz = "kontakt.php";
            break;
             
        case $stranka == "workofka":
            $odkaz = "workofka.php";
            break;
             
         case $stranka == "registrace":
            $odkaz = "registrace.php";
            break;
        
        case $stranka == "osobniudaje":
            $odkaz = "osobniudaje.php";
            break; 
            
        case $stranka == "zmenahesla":
            $odkaz = "zmenahesla.php";
            break; 
            
        case $stranka == "odhlaseni":
            $odkaz = "odhlaseni.php";
            break;          
        }   
             
       include ($odkaz);
        ?>
        <!-- Konec Inzerát -->              
        
       </div>
       
 <!-- Pravý menu -->      
       <div id="pravyMenu"> 
         
          <!-- Přihlášení --> 
          <?php
          if ($_SESSION["uzivatel"])
          {
            include ("prihlasen.php");
          }
          else
          {
            include ("prihlaseni.php");
          }                      
           
          ?>      
          <!-- Vyhledávání --> 
           <?php
            include ("vyhledavani.php")
           ?>             
          <!-- Informace --> 
            <?php
             include ("informace.php")
            ?>
            
        </div>     
        
    <!-- Pata -->
    <?php
      include ("pata.php")
    ?>
    
 
   </div><!-- Konec Obalu -->
  </body>
</html>

Napsal: úte 18. pro 2007, 11:57
od Vodny
Můžete si to zkusit jen tam uživatel

login : a
heslo : a

Napsal: úte 18. pro 2007, 14:20
od cabman
Já myslím že ti tam chybí registrace session. Nevím jestli je to důvod proč to nechodí, ale mě to dělalo něco podobného a vyřešila to registrace. Věci jako session_start() se vkládají externě.

Kód: Vybrat vše

<?
//login.php

 //načtení funkcí a connectu k databázi
 include 'connect.php'; 
 include 'authentifikace.php';

 //authenticateuser je funkce schovaná ve autentifikace.php,
 //která podle tabulky ověří, zda je uživatel registrován
 //pokud ano tak vrací 1 a provede se if jinak se provede else

 if (authenticateuserform($form_user_id,$form_password))
  {
  //registruji session pro info o uživateli které budou využívány k ověření na každé stránce
  session_register(loginus); 
  session_register(heslous); 
  session_register(hodnostus); 
  $loginus = $form_user_id;
  $heslous = $form_password;
  $hodnostus = dejhodnost($form_user_id);
  //přesměrování hlavičkou do .php
  header("Location:http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/"."adminindex.php");
  exit();
  }
  else
   {
   //přesměrování hlavičkou do logout.php protože údaje o zákazníkovi nesouhlasí
   //uživatel může skusit zadat informace znovu
   header("Location:http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/"."logout.php");
   exit();
   }
?>

Napsal: úte 18. pro 2007, 14:53
od l_iNu$
cabman píše:Já myslím že ti tam chybí registrace session. Nevím jestli je to důvod proč to nechodí, ale mě to dělalo něco podobného a vyřešila to registrace.
Session_register je "deprecated". Používá se $_SESSION["neco"].
cabman píše:Věci jako session_start() se vkládají externě.
Jak externě?

Vodny: co zdroj zaloguj.php?

Napsal: úte 18. pro 2007, 14:55
od Vodny
tohle je zaloguj.php

Kód: Vybrat vše

<?php 
  session_start();     
?>
<?php

  $log = $_POST['login'];
  $pass = $_POST['heslo'];
  
  $hlavicka = "Informace o přihlašní do MotoCR";
  
  if ($log == null || $pass == null)
  {
    $hlaska = "Nevyplni jsi login nebo heslo";
  }
  
  else
  {    
     require_once ('pripojit.php');  
     $dotazlog = mysql_query("select login,heslo from uzivatel where login = '$log'");   
     $zaznam = MySQL_Fetch_Array($dotazlog, MYSQL_NUM);  
     
     if ($zaznam[0]==null)
     {
      $hlaska = "uživatel nenalezen";
      
     }
     else
     {
      if($zaznam[1]==$pass)
      {
        $_SESSION["uzivatel"]= $log;        
        $hlaska = "Přihlášen jako ".$_SESSION["uzivatel"];
        
      }
      else
      {
        $hlaska = "špatný heslo!";
        
      }
     }     
  }
  
  include ("hlaska.php");
?>

Napsal: úte 18. pro 2007, 15:11
od Vodny
Fakt tomu nerozumim na webzdarma se přihlásim jako "a" "a" příhlásí se to ale při dalšim procházení webu to prostě už v tý SESSION asi nejni nebo nevim. Ale na tom localu to prostě jde jak je to sakra možný .

Napsal: úte 18. pro 2007, 15:18
od l_iNu$
Vodny píše:Fakt tomu nerozumim na webzdarma se přihlásim jako "a" "a" příhlásí se to ale při dalšim procházení webu to prostě už v tý SESSION asi nejni nebo nevim. Ale na tom localu to prostě jde jak je to sakra možný .

Kód: Vybrat vše

var_dump($_SESSION);

Napsal: úte 18. pro 2007, 15:19
od Vodny
??

var_dump($_SESSION);

??

Prosím můžeš mi to vysvětlit co to je?

Napsal: úte 18. pro 2007, 15:25
od l_iNu$
Vodny píše:var_dump($_SESSION);
Prosím můžeš mi to vysvětlit co to je?
Výpiše obsah a typ proměnné . )

Napsal: úte 18. pro 2007, 15:28
od Vodny
a k čemu to ? vypsat to můžu přece i pomocí ECHa

Napsal: úte 18. pro 2007, 15:32
od l_iNu$
Vodny píše:a k čemu to ? vypsat to můžu přece i pomocí ECHa
No říkáš že se ti ztrácí ty proměnné, tak abys viděl co tam máš za hodnoty.

Napsal: úte 18. pro 2007, 15:37
od Vodny
Jo tak. Já tušim kde se to ztrácí ale nevim proč.

Napsal: úte 18. pro 2007, 15:42
od TomTom
Máš povolený cookies pro přenos SID nebo ho předáváš v URL?

Napsal: úte 18. pro 2007, 15:43
od Vodny
TomTom píše:Máš povolený cookies pro přenos SID nebo ho předáváš v URL?
Kde se musí povolit ten přenos SID pře URL nic nepodávám.

Napsal: úte 18. pro 2007, 15:44
od l_iNu$
No vono už je spatně tohle:

Kód: Vybrat vše

if ($_SESSION["uzivatel"]) ...
správně by asi mělo být

Kód: Vybrat vše

if (isset($_SESSION["uzivatel"])) ...

Napsal: úte 18. pro 2007, 15:48
od Vodny
l_iNu$ píše:No vono už je spatně tohle:

Kód: Vybrat vše

if ($_SESSION["uzivatel"]) ...
správně by asi mělo být

Kód: Vybrat vše

if (isset($_SESSION["uzivatel"])) ...
Kruci chlape máš recht! to bude tim dal jsem to tam sice to neukazuje to co to má ale je to přihlášený a už to neodpadá! takže díky díky moc konečně se to hnulo

Napsal: úte 18. pro 2007, 15:49
od TomTom
Vodny píše:
TomTom píše:Máš povolený cookies pro přenos SID nebo ho předáváš v URL?
Kde se musí povolit ten přenos SID pře URL nic nepodávám.
Nastavení session je v php.ini. Můžeš mit celkově jinak nastavenou praci se session na localhostu než maj na tom WZ. Jinak cookies vypínáš/zapínáš normálně v prohlížeči. Ale kdyby jsi je měl vyplé, tak by nefungovalo přihlášení vůbec..

Napsal: úte 18. pro 2007, 16:12
od Vodny
stejně tam je pořád problém udržet tu session naživu. to tom přidání isset se sice ukáže to menu který se má tomu přihlášenýmu ukázat ale v session je uložená hodnota "0" ono se to musí nechat nějakym způsobem předávat protože takhle jak mi to teď funguje je to pořád špatný