sesje w php | problem...

0

witam. wczensiej stronka mi dzialala ale teraz mam problem. nie wiem dlaczego. moze na serwerze cos zostalo zmienione i w mojej grze nikt nie moze sie zalogowac.w skrypcie nic nie zmianialem i z dnia na dzien nie mozna sie bylo zalogowac. oto kod przy logowaniu:

session_start();  // Start Session

session_register('xloginx');
		$_SESSION['xloginx'] = $username;

	header("Location: info.php");

do sesji zostala zapisana nazwa uzytkownika...teraz juz strona info.php

<?
session_start();


if(empty($_SESSION[$xloginx])) {
	echo'<META HTTP-EQUIV=Refresh CONTENT="0; URL=login.php">';
	
} 
else 
{ 
...

no i prznosi mnie do strony login.php tak jakby nie czytalo <ort>w ogóle </ort>sesji...wiecie moze w czym tkwi problem ?

0

Nie wiem czy to to, ale:

Uwaga
Przy korzystaniu z tablicy $_SESSION (lub $HTTP_SESSION_VARS) nie nalezy korzystać z funkcji session_register(), session_is_registered() i session_unregister().

http://pl.php.net/manual/pl/function.session-register.php

0

a nie:

if(empty($_SESSION['xloginx'])) {

? :>

0

dalej nic :/ loguje ale nie prznosi danych w sesji...

0

Nie mam pojęcia co za idiota użył zmiennych globalnych, ale na to wygląda. Znam budowę silników MMO całkiem dobrze bo kilka lat w tym siedzę. Mogę prosić o pełne source cytowanych plików? (Tych dwóch z 1 postu)

0

to jest plik checkuser.php, ma on za zadanie sprawdzic czy gracz wpisał poprawny login i haslo i zalogowac go:

<?

include 'config.php';
// Convert to simple variables
$username = $_GET['u'];
$password = $_GET['p'];

		 $ip = $REMOTE_ADDR;
  // $host = gethostbyaddr($ip);
   $czas = date("H:i:s");
   $data = date("m.d.y"); 

if((!$username) || (!$password)){
	echo "Please enter ALL of the information! <br />";
	//include 'index.htm';
	exit();
}


$sql = mysql_query("SELECT * FROM ".$prefix."users WHERE username='$username' AND password='$password'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
	while($row = mysql_fetch_array($sql)){
	foreach( $row AS $key => $val ){
		$$key = stripslashes( $val );
	}

session_start();  // Start Session
	// Register some session variables!
	$xloginx = $username;
		session_register('$xloginx');
		$_SESSION['$xloginx'] = $username;
		


		


$sql = mysql_query("UPDATE ".$prefix."users SET ost_logowanie = NOW() WHERE username = '$username' ");

//zapisywanie czasu ostatniego logowania do gry
		
		header("Location: info.php");

(...)

potem skrypt przekierowuje na info.php, a w tym pliku jest cos takiego:

<?
session_start();

if(empty($_SESSION['xloginx'])) {


	echo'<META HTTP-EQUIV=Refresh CONTENT="0; URL=login.php">';
	
} 
else 
{ 



echo $xloginx;
include('config.php');

include('y.php');

(...)

?>

0

Skoro to ty robisz grę i wziąłeś skrypt z jakiegoś innego silnika to może spróbuj napisać własny, lepszy. Bo tutaj jakiś idiota rejestruje zmienne sesji których używa potem w $_SESSION i bawi się globalsami. Napisz go od nowa samemu bo ja się żyłować nie będę gdyż trzeba przerobić cały silnik.

0

Ale czemu ciągle tylko powtarzasz "idiota, idiota, idiota", co w tym rozwiązaniu jest takiego złego ? :P sorki, że zadaję być może głupie pytanie, ale naprawdę nie wiem ;] sam robiłem podobnie w swoim skrypcie i nie wiem, dlaczego to jest idiotyczne ^^

0

bo session_register to polecenie stosowane przez naszych pradziadów, obecnie nie stosowane w ogóle
poza tym ktoś kto to pisał nie ma pojęcia o php i w ogóle nie kmini po co to polecenie w ogóle jest bo łączy dwa sposoby:

sposób pierwszy:

$xloginx = $username;
session_register('xloginx');

sposób drugi:

$_SESSION['xloginx'] = $username;

a ty masz:

session_register('$xloginx');
$_SESSION['$xloginx'] = $username;

czyli coś tak debilnego że frytka wysiada
w dodatku jeszcze tam znaczki dolara ci się wpieprzyły co już jest totalnym nieporozumieniem
inaczej mówiąc: ktoś kto to pisał nie znał podstaw php, prawdopodobnie nie przeczytał ani jednego prostego kursu więc czemu by go tak nie nazwać idiotą ?

0

Właśnie. Żeby to poprawić trzeba przepisać cały silnik czego nie zrobię bo nie mam ochoty poprawiać czyiś błędów i tyle. Jedyne rozwiązanie to przepisać silnik zgodnie ze standardem, albo tak jak ja to czasem robię: chociaż podstawą standardu.

0

a nie lepiej napisać

if (isset($_SESSION['xloginx'))
   echo "ZALOGOWANY";
else
   echo "NIE ZALOGOWANY";

?? ;p

0

Miłego przerabiania całego kodu. ^^

0

wystarczy że session_register wywali i będzie ok

0

Przepraszam, czy nie uważasz że $_SESSION['xloginx'] i $_SESSION['$xloginx'] to dwie różne zmienne? Do tego po co taki mętlik? Startujesz sesje, przepisujesz, rejestrujesz i zapisujesz. Nie można wystartować i wpisać tylko trzeba kombinować jak koń pod górkę. Strach się bać...

<?

include 'config.php';
// Convert to simple variables
$username = $_GET['u'];
$password = $_GET['p'];

   $ip = $REMOTE_ADDR;
  // $host = gethostbyaddr($ip);
   $czas = date("H:i:s");
   $data = date("m.d.y"); 

if((!$username) || (!$password)){
	echo "Please enter ALL of the information! <br />";
	//include 'index.htm';
	exit();
}


$sql = mysql_query("SELECT * FROM ".$prefix."users WHERE username='$username' AND password='$password'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
	while($row = mysql_fetch_array($sql)){
	foreach( $row AS $key => $val ){
		$$key = stripslashes( $val );
	}

session_start();  // Start Session
//DeM - Poprawka po bezsensownym rejestrowaniu S_VAR
$xloginx = $_SESSION['xloginx'] = $username;


$sql = mysql_query("UPDATE ".$prefix."users SET ost_logowanie = NOW() WHERE username = '$username' ");

//zapisywanie czasu ostatniego logowania do gry
		
		header("Location: info.php");

(...)
<?
session_start();

if(empty($_SESSION['xloginx'])) {


	echo'<META HTTP-EQUIV=Refresh CONTENT="0; URL=login.php">';
	
} 
else 
{ 



echo $_SESSION['xloginx']; //DeM - Poprawka z $xloginx
include('config.php');

include('y.php');

(...)
?>

Tak spróbuj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1