Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

PHP logowanie za pomoca $_SESSION problem z szybkim automatycznym wylogowaniem.

Ostatnio zmodyfikowano 2014-09-24 21:59
Autor Wiadomość
Haker123
Temat założony przez niniejszego użytkownika
PHP logowanie za pomoca $_SESSION problem z szybkim automatycznym wylogowaniem.
» 2014-09-20 22:56:12
Witam.
Na swojej stronie mam zrobione logowanie za pomoca session. Wszystlo ladnie dziala ale kiedy pisze jakis dlugi komentarz lub opis to po wyslaniu tresci okazuje sie ze mnie wylogowalo i trzeba wszystko od nowa pisac.

Testowalem to na localhost i nie mialem takiego problemu ale po umieszczeniu strony na internecie taki problem sie pojawil.

Sesje startuje w odzielnym pliku ktory jest dodany do index.php

session_start();
.........
// jeśli nie ma jeszcze sesji "logged" to wypełniamy je domyślnymi danymi
if(!isset($_SESSION['logged']))
{
    $_SESSION['logged'] = false;
    add_visit() ; //+1 do wizyt na stronie
}

P-117261
Winner_Of_Death
» 2014-09-21 08:51:07
Możesz trochę lepiej opisać problem, bądź dać nieco więcej kodu? Ten kod który podałeś jest sprawny (oczywiście jeżeli masz sprawną funkcję add_visit().
Może include'ujesz pliki w złej kolejności i np. najpierw jest ten odpowiedzialny za dodawanie komentarza, a potem ten odpowiedzialny za start_session()?
P-117266
Haker123
Temat założony przez niniejszego użytkownika
» 2014-09-21 21:07:49
Jedyny plik do jakiego dodaje config.php (plik z start_sesion()) to index.php i wyglada on tak

<!DOCTYPE html>

<?php include 'config.php' ; ?>

<html prefix="og: http://ogp.me/ns#">

<head>

<title>Adrian Rojek</title>

<!-- kodowanie znaków - utf8, dzięki czemu możemy wyświetlić, np. polskie znaki -->
<meta charset="utf-8">


<meta property="og:title" content="Programowanie" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://adrian-rojek.cba.pl/index.php?type=home" />
<meta property="og:description" content="Blog z programami mojego autorstwa." />

<!-- OPIS STRONY --
<meta name="description" content="Blog z programami mojego autorstwa.">
<!-- HASLA DLA WYSZUKIWARKI --
<meta name="keywords" content="HTML,CSS,PHP,CPP,C++,ALLEGRO,QT,OpenGL,UNITY">
<!-- AUTOR STRONY --
<meta name="author" content="Adrian Rojek"> -->

<!-- HEADER -->
<link href="css/js-image-slider.css" rel="stylesheet" type="text/css" />
<script src="js/js-image-slider.js" type="text/javascript"></script>
<link href="css/generic.css" rel="stylesheet" type="text/css" />
<!-- -->


<link rel="stylesheet" href="css/style.css" type="text/css" />


<script type="text/javascript">


<!-- FUNKCJA DO LADOWANIA STRONY GLOWNEJ PO ODPALENIU STRONY -->
function Home()
{
populateSlider() ;
}


<!-- FUNKCJE DLA HEADER -->
function populateSlider()
{
            //Note: If the slider container has been set as invisible(e.g. display:none;), make sure set it visible before reload the imageSlider
setSliderMarkup();
imageSlider.reload();
}

function setSliderMarkup()
{
var sliderFrame = document.getElementById("sliderFrame");
sliderFrame.innerHTML = '<div id="slider"><img src="Slider/image-slider-1.png" alt="#slider1" />' +
'<img src="Slider/image-slider-2.png" alt="#slider2" /><img src="Slider/image-slider-3.png" alt="#slider3" />' +
'<img src="Slider/image-slider-4.png" alt="#slider4" /></div>';
}


</script>


<!-- SKRYPT DO URUCHAMIANIA STRON PHP W DIV -->
<script src=" http://code.jquery.com/jquery.min.js " type="text/javascript"> </script>

</head>

<body onload="Home();">

<div id="page">
<br />
<header id="header">

<div id="sliderFrame"></div>

<div id="slider1" style="display: none;">
<a href="index.php?type=cpp/Snake/snake&ID=7">SNAKE. Gra na krótkie wolne chwile.</a>
</div>

<div id="slider2" style="display: none;">
<a href="index.php?type=php/Strona/strona&ID=3">Opis strony na której jesteś.</a>
</div>

<div id="slider3" style="display: none;">
<a href="index.php?type=cpp/MIX/MIX&ID=9">MIX. Kółko i krzyżyk dla dwóch i labirynt.</a>
</div>

<div id="slider4" style="display: none;">
<a href="index.php?type=php/BazaFilmow/film&ID=2">Baza filmów z aplikacją do jej obsługi.</a>
</div>

</header> <!-- end title -->

<nav id="menu"> <!-- <h3> MENU </h3> -->

<ul>
<li><a href="index.php?type=home">Strona GŁówna</a></li>
<li><a href="index.php?type=cpp">CPP</a></li>
<li><a href="index.php?type=php">PHP / MYSQL / HTML</a></li>
<li><a href="index.php?type=contactform">Kontakt</a></li>
<li><a href="index.php?type=about">O Blogu</a></li>
</ul>

<div id="visit">
<?php wypisz_visit() ; ?>
</div>
<br /> <br />


<?php

if( $_SESSION['logged'] )
{
?>
<button type="button" onclick="javascript:window.location.href='logout.php'; "> WYLOGUJ </button>
<?php
}
?>

</nav> <!-- end menu -->


<div id="content">

<?php
// zmienna $id przekazana metoda GET
@$type = $_GET['type'];

// sprawdzamy czy zmienna $id nie jest pusta
if( isset( $type ) )
{
$a = $type.".php" ;
// sprawdzamy czy plik o danej nazwie (php) oraz dopuszczalnych znakach (litera oraz -) istnieje
if( (file_exists("$a") ) && (preg_match('|^[[:alpha:]-/]+$|', $type) ) )
{
include "$a";
}
// jezeli plik nie istnieje wyswietla się komunikat
else include '404.php';
}
// jezeli zmienna $id jest pusta wyswietla się strona glowna
else include 'home.php';
?>

</div> <!-- end content -->

</div> <!-- end page -->

</body>

</html>

Jeden z plikow do ktorych mozna dodawac komentarze (jest on indludowany w index.php w <div id="content">

<?php

db_connect() ;

$id = $_GET['ID'] ;

//POBIERAMY WPIS
$zapytanie ="SELECT * FROM wpisy WHERE ID_wpis = $id " ;
if( !$result = $db->query( $zapytanie ) )
{
printf("Połączenie nie udane ");
exit;
}

if( $result->num_rows > 0 )
{
$row = $result->fetch_assoc() ;

?>

<div id="strona">

<h1 id="tytul"> <?php echo $row['title'] ?> </h1>
<time id="date"> <?php echo $row['date'] ?> </time>

<p id="tresc"> <?php echo $row['text'] ?> </p>

<br /><br /><br />

<?php $result->free() ; ?>

<h2> KOMENTARZE </h2>

<?php

$zapytanie = "SELECT * FROM komentarz_wpis
  LEFT JOIN nick ON komentarz_wpis.ID_nick = nick.ID_nick
  WHERE ID_wpis = $id
  ORDER BY date DESC" ;
 
$result = $db->query( $zapytanie ) ;
if( $result->num_rows > 0 )
{
while( $row = $result->fetch_assoc() )
{
?>

<div id="comment">

<?php
if( $row['admin'] == 1 )
{
echo "<h3 class=\"admin\" > Adrian Rojek </h3>" ;
}
else
{
echo "<h3>".$row['Nick']."</h3>" ;
}
?>


<time id="date"> <?php echo $row['date'] ?> </time>

<p id="text"> <?php echo $row['text'] ?> </p>

</div> <!-- <div id="comment"> -->

<?php
}
}
else
{
echo "<div id=\"comment\"></div>" ;
}

echo "<br /> <br />" ;

$result->free() ;

?>

<div id="form">

<form id="formm" action="add_comment_wpis.php" method="post">

<?php

if( $_SESSION['logged'] )
{
?><input type="hidden" name="admin" value="1" > <?php
}
else
{
?>
<label for="form_nick">NICK*</label> <br />
<input id="form_nick" name="form_nick" type="text"  size="20"> <br /><br />
<?php
}

?>
<label for="form_comment">TREŚĆ KOMENTARZA*</label> <br />

<textarea id="form_comment" name="form_comment" rows="15" cols="80"> </textarea> <br /> <br />
<input type="hidden" name="ID" value="<?php echo $id ?>" >
<input type="submit" name="submit" value="WYŚLIJ">

</form>

</div> <!-- form -->


</div> <!-- STRONA -->
<?php
}
else include '404.php';
$db->close() ; ?>

A tak wyglada add_comment_wpis.php

<?php

include 'config.php' ;

db_connect() ;

$data = date( " Y-m-d H:i:s" ) ;
$id = $_POST['ID'] ;

if( $_SESSION['logged'] )
{
if( isset( $_POST['form_comment'] ) )
{
$text = $_POST['form_comment'] ;
$zapytanie ="INSERT INTO komentarz_wpis SET text='$text' , date='$data' , admin='1' , ID_wpis='$id'" ;
$db->query( $zapytanie ) ;
}
}
else
{
if( isset( $_POST['form_comment'] ) && isset( $_POST['form_nick'] ) )
{
$nick = $_POST['form_nick'] ;
$text = $_POST['form_comment'] ;
$zapytanie ="SELECT * FROM nick WHERE Nick='$nick' " ;
$result = $db->query( $zapytanie ) ;
if( $result->num_rows > 0 )
{
$row = $result->fetch_assoc() ;
$id_nick = $row['ID_nick'] ;
$zapytanie ="INSERT INTO komentarz_wpis SET text='$text' , date='$data' , ID_nick='$id_nick' , ID_wpis='$id'" ;
$db->query( $zapytanie ) ;
$result->free() ;
}
else
{
$zapytanie ="INSERT INTO nick SET Nick='$nick'" ;
$db->query( $zapytanie ) ;
$zapytanie ="SELECT * FROM nick WHERE Nick='$nick'" ;
$result = $db->query( $zapytanie ) ;
if( $result->num_rows > 0 )
{
$row = $result->fetch_assoc() ;
$id_nick = $row['ID_nick'] ;
$zapytanie ="INSERT INTO komentarz_wpis SET text='$text' , date='$data' , ID_nick='$id_nick' , ID_wpis='$id'" ;
$db->query( $zapytanie ) ;
$result->free() ;
}
}
}//if( isset( $_POST['form_comment'] ) && isset( $_POST['form_nick'] ) )
}// else od if( $_SESSION['logged'] )

$db->close() ;

//AUTOMATYCZNIE PRZECHODZIMY NA GLOWNA STRONE
//$dalej = "http://localhost/xampp/moje/mojastrona/" ;
//header("Location: $dalej");
//header("window.history.back()");
?>

<script type="text/javascript">
window.location.href = "index.php?type=wpis&ID=<?php echo $id ;?> " ;
</script>
Plik add_comment_wpis.php otwiera sie nie w index.php dlatego dodaje do niego config.php.


EDIT:
add_visit() wyglada tak

function add_visit()
{
db_connect() ;

global $db ;

$db->query( "UPDATE visit SET all_visit = all_visit+1 WHERE ID_visit = 1 " );

db_close() ;
}
P-117305
maly
» 2014-09-23 11:13:27
Po pierwsze używaj error_reporting(E_ALL);.

Po drugie session_start() musi być użyte wcześniej niż cokolwiek wyślesz, więc takie coś jest złe

<!DOCTYPE html>

<?php include 'config.php' ; ?>
...

spróbuj tak
<?php include 'config.php' ; ?>
<!DOCTYPE html>
...
P-117380
Haker123
Temat założony przez niniejszego użytkownika
» 2014-09-24 21:59:26
Przepraszam ze nie odpisywalem ale mialem problem z internetem.
Jutro przetestuje to i powiem czy dziala tak jak trzeba.

EDIT.

Przeniesienie <?php include 'config.php' ; ?> przed <!DOCTYPE html> pomoglo.
Dzieki za pomoc ;]
P-117473
« 1 »
  Strona 1 z 1