Πρόβλημα με refresh σε σελίδα με session_start

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 18 Νοέμ 2008 15:38

Εχω το εξής θέμα:

Σε μία σελίδα δίνω φόρμα login όπου και ξεκινάει session:
α)session_start();
β)εμφανίζεται η φόρμα
γ)εκτελείται query στη βάση και αν ο user είναι απλώς χρήστης = session_register ($_SESSION['uid'] = $row['uid']); με το id του χρήστη
αν είναι admin, τότε
session_register ($_SESSION['uid'] = $row['uid']); με το id του admin.

Ο διαχωρισμός γίνεται γιατί οδηγούνται σε διαφορετικές σελίδες όπου έχω το:
session_start();
if (session_is_registered($_SESSION['uid']) )
{
$uid = $_SESSION['uid'];
κ.λ.π κ.λ.π

Τέλος έχω και την σελίδα logout με το εξής script:
session_start();
$_SESSION['uid'];
unset ($_SESSION['uid']);
session_destroy();
echo '<br>Εχετε αποσυνδεθεί<br>';

Το πρόβλημα είναι το εξής: αν κάποιος αποσυδενθεί, πατήσει το back στον browser, φτάσει πίσω στην σελίδα στην οποία γινόταν το query και πατήσει το refresh, τότε αυτόματα συνδέεται πάλι.
Πως μπορεί να αντιμετωπιστεί αυτό χωρίς session_cache_expire ;

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 19 Νοέμ 2008 17:02

Βάλε no cache στο HTML

Κώδικας: Επιλογή όλων

<meta http-equiv="Pragma" content="no-cache">
Επίσης.. ο τρόπος που χειρίζεσαι τα sessions είναι μίξη του παλιού με τον νέο τρόπο.

Καλύτερα θα ήταν να πας με το νέο τρόπο. Να ορίζεις session variables απλά με $_SESSION['abc'] = 'def'; , να σβήνεις ένα session variable με unset($_SESSION['abc']); και να βλέπεις αν κάποιο session έχει οριστεί με isset($_SESSION['abc']) ή με array_key_exists($_SESSION['abc']) . Το isset() δυστυχώς δεν δουλεύει με null values.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 19 Νοέμ 2008 18:08

Το metta http κ.λ.π κ.λ.π. πρέπει να φορτωθεί σε όλες τις σελίδες; γιατί προς το παρών δεν μου δουλεύει, αλλά φοβάμαι μήπως έχω πρόβλημα αλλού.

Το isset μου δημιουργεί διάφορα προβλήματα, μάλλον φταίει αυτό που λές για null values, οπότε δεν το πολυχρησιμοποιώ. Προτιμάω το empty ή το ==null οπότε θα το δοκιμάσω όπως λές, χωρίς το session_is_registered.
Το array_key_exists δεν το "καταλαβαίνει" η php (μάλλον είναι παλιότερης έκδοσης ή θα πρέπει να φορτώσω κανένα module).

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 19 Νοέμ 2008 21:56

Το array_key_exists() υπάρχει από την έκδοση 4.1 και μετά.

Το μπλέξιμο που υπάρχει με το null είναι οτι δεν το λαμβάνει ως αληθές το isset()

Κώδικας: Επιλογή όλων


$abc&#91;'def'&#93; = 123;
echo isset&#40;$abc&#91;'def'&#93;&#41; ? 'is set' &#58; 'not set'; // bgazei&#58; is set
echo array_key_exists&#40;'def', $abc&#41; ? 'is set' &#58; 'not set'; // bgazei&#58; is set

$abc&#91;'def'&#93; = null;
echo isset&#40;$abc&#91;'def'&#93;&#41; ? 'is set' &#58; 'not set'; // bgazei&#58; not set
echo array_key_exists&#40;'def', $abc&#41; ? 'is set' &#58; 'not set'; // bgazei&#58; is set


Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 19 Νοέμ 2008 21:57

Το no-cache βάλε το σε όλες τις σελίδες που έχεις ευαίσθητα δεδομένα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cherouvim » 19 Νοέμ 2008 23:41

Η συνταγή που πιάνει για browser caches και περίεργα proxies είναι να βάλεις στο http response τα:

Κώδικας: Επιλογή όλων

Cache-Control&#58; no-cache
Pragma&#58; no-cache
Expires&#58; Thu, 01 Jan 1970 00&#58;00&#58;00 GMT

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 20 Νοέμ 2008 11:52

To cache-expire μπορώ να το βάλω και μέσα στο session αλλά απ' ότι ξέρω έχει να κάνει με τα cookies. Αν κάποιος τα έχει απενεργοποιήσει στον browser του θα παίξει;
Γι αυτό ψάχνω άλλον τρόπο.
Εχω μπερδέψει κάτι ή τα λέω σωστά;

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cherouvim » 20 Νοέμ 2008 11:55

Έχει να κάνει με τα http headers και όχι με το http session ή http cookies.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 20 Νοέμ 2008 12:13

Υπάρχουν διαφορετικές cache μια για κάθε cookie και μια κάθε σελίδας. Το expire ενός cookie είναι εντελώς ανεξάρτητο από την cache του περιεχομένου.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 24 Νοέμ 2008 12:08

cpulse: βάζω αυτό <meta http-equiv="Pragma" content="charset=utf-8; no-cache ; "Expires: Thu, 01 Jan 1970 00:00:00 GMT">
σαν metta αλλά δεν παίζει.
Επίσης δοκίμασα κι αυτό:
<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="Thu, 01 Jan 1970 00:00:00 GMT">
αλλά πάλι τίποτα.
Επίσης το έβαλα και σαν php file και το τραβάω με include (....) αλλά πάλι τίποτα.

Μήπως δηλώνεται με άλλον τρόπο;

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 25 Νοέμ 2008 16:06

Ίσως να υπάρχει και κάτι άλλο που μπερδεύει το θέμα.
Μπορείς να βάλεις σε comments όλο τον PHP κώδικα; Υποψιάζομαι οτι κάποιος κώδικας ενεργοποιείται και σου δημιουργεί το πρόβλημα.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 25 Νοέμ 2008 16:55

cpulse έγραψε:Υποψιάζομαι οτι κάποιος κώδικας ενεργοποιείται και σου δημιουργεί το πρόβλημα.
Γιατί έχω την ίδια αίσθηση; :roll:



Κώδικας: Επιλογή όλων

<?php session_start&#40;&#41;; ?>
<html>
<head>
<title>..............</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><link href="admin/admin.css" rel="stylesheet" type="text/css" />
<body onLoad="focus&#40;&#41;;login.uname.focus&#40;&#41;">
<br><p align = center>ΓΙΑ ΝΑ ΜΠΟΡΕΣΕΤΕ ΝΑ ΔΙΑΧΕΙΡΙΣΤΕΙΤΕ ΤΗΝ ΒΑΣΗ<br>ΠΡΕΠΕΙ 
ΝΑ ΕΧΕΤΕ ΤΑ ΚΑΤΑΛΛΗΛΑ ΔΙΚΑΙΩΜΑΤΑ</font></p><br><br>
<?php
if&#40;$_POST&#91;"uname"&#93; == null && $_POST&#91;"upass"&#93; == null &#41;
&#123;
  require &#40;"backing_files/login_form.php"&#41;;
&#125;
else
&#123;
"<div class=data_tbl>";
//------------------------------ΕΛΕΓΧΟΣ ΣΥΝΔΕΣΗΣ ΚΑΙ ΧΡΗΣΗ ΤΗΣ ΒΑΣΗΣ------------------------------//
require &#40;".php"&#41;;

//------------------------------ΔΗΛΩΣΗ ΜΕΤΑΒΛΗΤΩΝ------------------------------//
$uname = md5 &#40;$_POST&#91;'uname'&#93;&#41; ;
$upass = md5 &#40;$_POST&#91;"upass"&#93;&#41;;

//------------------------------ΑΝΑΖΗΤΗΣΗ ΕΓΓΡΑΦΩΝ ΣΤΗ ΒΑΣΗ------------------------------//
   $query= "select * from users where uname like'%".$uname."%' and upass like '%".$upass."%' ";
   $result = mysql_query &#40;$query&#41;;
   $num_results = mysql_num_rows&#40;$result&#41;;
     if &#40; mysql_num_rows&#40;$result&#41; > 0 &#41;
	 &#123;
//--------------------------ΕΛΕΓΧΟΣ ΑΝ Ο ΧΡΗΣΤΗΣ ΕΙΝΑΙ Ο ADMIN---------------------------//
if ($_POST['uname'] == "........." && $_POST['upass'] == "........")

Κώδικας: Επιλογή όλων

	   &#123;
         while &#40;$row =mysql_fetch_array&#40;$result&#41;&#41;
           &#123;
             session_register &#40;$_SESSION&#91;'uid'&#93; = $row&#91;'uid'&#93;&#41;;
	         echo  "<h4>Είστε συνδεδεμένος σαν <font color = #ff0000>" .$row&#91;'uuser'&#93;. "</font></h4>";		   
             echo  "<br><a href = admin/main.php>Συνέχεια</a>";
           &#125;
       &#125;
//--------------------------ΕΛΕΓΧΟΣ ΑΝ Ο ΧΡΗΣΤΗΣ ΕΙΝΑΙ Ο ADMIN---------------------------//
elseif ($_POST['uname'] != "......" && $_POST['upass'] != "......")

Κώδικας: Επιλογή όλων

	   &#123;
         while &#40;$row =mysql_fetch_array&#40;$result&#41;&#41;
           &#123;
             session_register &#40;$_SESSION&#91;'uid'&#93; = $row&#91;'uid'&#93;&#41;;
	         echo  "<h4>Είστε συνδεδεμένος σαν <font color = #ff0000>" .$row&#91;'uuser'&#93;. "</font></h4>";		   
             ?><a href="users/users.php">Πατήστε εδώ</a> για 
             να συνεχίσετε με την διαχείριση των στοιχείων της εταιρεία σας.<?php
           &#125;
       &#125;
	 &#125;
       else
         &#123;
		      echo "<font color = #ff0000>Η προσπάθεια σύνδεσης απέτυχε.<br>
              Ελέγξτε το user name και το password που δώσατε για τυχόν ορθογραφικά λάθη</font>";
              echo "<br><a href = login.php>Δοκιμάστε πάλι</a>";
              mysql_free_result &#40;$result&#41;;			  
              exit;
         &#125;
mysql_free_result &#40;$result&#41;;
"</div>";
&#125;
?>

Εκεί που έχω τα τονισμένα σημεία είναι που (υποθέτω πως) ξαναενεργοποιείται ο κώδικας.
Μάλλον πρέπει να ξανασκεφτώ την όλη διαδικασία αλλά δεν έχω και πολλούς τρόπους να διαχωρίσω τον admin απο τούς users. Ακόμα κι αν κάνω τον διαχωρισμό σύμφωνα με το id του καθένα κι όχι με το username/password, πάλι θα ξαναστέλνονται τα δεδομένα.

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Basilakis » 25 Νοέμ 2008 18:25

Το ίδιο έκανε και το Wordpress μόνο με διαφορετικό τρόπο. Εάν έκανα refresh αποσύνδεε τον χρήστη. Το ίδιο γινότανε και όταν μετακοινόσουνα μεταξύ σελίδων. Αλλά αφού φόρτωνε το header πως μπορούσε να γίνεται αυτό;

Η Λύση ήρθε με το εξής.

Αντί να βάζω το session_start στο header (αφού υπάρχει σε όλες τις σελίδες το έβαλα στην αρχή των σελίδων. Πλέων λειτουργεί σωστά και δεν έχει θέμα.

Ίσως και σε εσένα να γίνεται για αυτό το λόγο;

Άλλη λύση είναι στην σελίδα αποσύνδεσης να βάλεις ένα header_location και να κάνει forward Στην αρχική, έτσι να μην μπορεί ο χρήστης να κάνει back.

Σαν error το έχω δεί σε πολλά sites, included phpBB based forums.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από cpulse » 25 Νοέμ 2008 19:18

Αποστόλη δεν μπορώ να ξέρω.. θα πρέπει να έχω όλο τον κώδικα και κάπου πρόχειρο για tests. Και χρόνο.

Αλλά για κάνε μια δοκιμή ακόμα..

το

Κώδικας: Επιλογή όλων

if&#40;$_POST&#91;"uname"&#93; == null && $_POST&#91;"upass"&#93; == null &#41; 
κάνε το

Κώδικας: Επιλογή όλων

if &#40;empty&#40;$_POST&#41;&#41; 

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Πρόβλημα με refresh σε σελίδα με session_start

Δημοσίευση από Apostolis_38 » 26 Νοέμ 2008 10:43

cpulse: Και με το empty το ίδιο κάνει. Το είχα δοκιμάσει.
Αυτός είναι όλος ο κώδικας, ευχαριστώ πάντως.

Basilakisweb: δοκίμασα κι εγώ να παραλείψω το session_start αλλά πάλι το κάνει με λίγο διαφορετικό τρόπο, μου εμφανίζει το "είστε συνδεδεμένος σαν...", απλώς το login αποτυγχάνει.
Θα δοκιμάσω την άλλη λύση με το header_location, αλλιώς θα καταφύγω σε java να απενεργοποιήσω το back button. Κάπου είδα οτι υπάρχει τέτοιο script.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες