webForumDet fria alternativet

Sessioner på server med hög säkerhet

PHP

18 svar · 387 visningar · startad av filipbh

Medlem sedan juli 2002405 inlägg
Frågan#1

Har en fråga angående sessioner..

Jag har tidigare använt mig av denna kod

session_start();
session_register("sessionsnamn");
$sessionsnamn="värde";

Ibland @ framför.. Vad gör det för skillnad förressten?

Nu har jag sett att man kan använda $HTTP_SESSION_VARS["sessionsnamn"] men det fungerar inte för mig... Servern ligger hos B-one och jag vet inte vad de har för sessionsinställningar.

Någon som vet hur jag ska göra för att hålla kvar sessionerna??

Tack på förhand!
/Filip b

Medlem sedan aug. 20002 975 inlägg
#2

@ framför gör att felmeddelande inte skrivs ut.

Du bör använda:

<?php

session_start();
$_SESSION['variabel'] = 'värde';

För att hämta sessionsvariabel:
.

<?php

session_start();

echo $_SESSION['variabel'];

Jag har aldrig använt B-one, men det borde fungera även där.
Vad är det som inte fungerar för dig ?

Medlem sedan juli 2002405 inlägg
#3

Okej, ska testa!

Medlem sedan juli 2002405 inlägg
#4

Det fungerar inte ändå.. Om man skriver ut $_SESSION['variabel'] på inloggningssidan så visas det men det visas inte på sidan efter. Skriver jag

session_start();
echo $_SESSION['variabel'];

så visas ett felmeddelande att sessionen redan har startats..

Det måste ju gå att hålla kvar sessionerna även på B-one.. Annars är det ju skit.

Medlem sedan mars 20007 896 inlägg
#5

Din webläsare tillåter cookies? Jag tänkte om det är på klientsidan felet ligger. :)

Medlem sedan juli 2002405 inlägg
#6

Jag har testat både på den här datorn och hemma men det fungerar inte på någon av dem.. Inte kan det väl vara Norton Anti-Virus som spökar?! Låter inte troligt...

Medlem sedan mars 20007 896 inlägg
#7

Jag såg nu att du fick ett felmeddelande (Från PHP-tolken antar jag) att sessionerna redan har startats, så det verkar inte ligga på klientsidan.

Du har inga include-filer med som innehåller session_start() också?

Medlem sedan juli 2002405 inlägg
#8

Nej, den första sessionkoden ligger på inloggningssidan.

Medlem sedan juli 2002405 inlägg
#9

När jag ska hämta en variabel så måste jag skriva $_POST['variabel'] eller $_GET['variabel'] beroende på om det är formulär eller URL. Måste jag använda POST eller GET för att hämta sessioner också?

Medlem sedan aug. 20002 975 inlägg
#10

Lägg följande överst på sidan, och tala om vad du får för felmeddelande:

<?php

error_reporting(E_ALL);
Medlem sedan juli 2002405 inlägg
#11

"Inloggad som:
Notice: Undefined variable: _SESSION in /customers/.../../httpd.www/top.php on line 23
"
Rad 23 är "echo $_SESSION['inl_user'];"

Medlem sedan juli 2002405 inlägg
#12

Har upptäckt en sak... Jag skapade en testsida som bara skrev ut sessionen och där skrev den faktiskt ut det.. Men den filen som egentligen innehåller anropet inkluderas i en PHP-fil. Har det något med det att göra? För skrivs det ut direkt på sidan fungerar det inte...

Medlem sedan aug. 20002 975 inlägg
#13

Det säger att sessionen inte är startad på sidan; sessionsvariablerna finns inte på sidan.

Har du med session_start() tidigare i skriptet ?
Om den då misslyckades borde du ha fått ett felmeddelande om det.

Om du inte ser det felmeddelandet på skärmen, kolla med Visa->Källa om det gömt sig bakom något.

Tänk på att session_start() är en header, och i likhet med andra headers måste denna finnas innan du skickar någon output till webbläsaren.

Med output menas HTML-kod, echo eller print. Även ett mellanslag eller en radbrytning utanför PHP-taggarna ger en output.

Detta gäller även för filer du eventuellt inkluderar.

Medlem sedan juli 2002405 inlägg
#14

Har en simpel inloggning nu och den ser ut så här...

if($_POST['login_button']) {

$antalhits = 0;
$_POST['loginpass'] = md5($_POST['loginpass']);
$open = mysql_connect ("localhost", "","");
$sql = "SELECT id,username,password FROM tabell WHERE username='".$_POST['loginname']."'";
$result = mysql_db_query("databas","$sql");

while($data=mysql_fetch_array($result)){

$antalhits = $antalhits+1;

if($data[username]==$_POST['loginname']){

	if($data['password']==$_POST['loginpass']){

@session_start();
@session_register("inl_user");
@$_SESSION['inl_user'] = $_POST['loginname'];

echo $_SESSION['inl_user'];

//@session_start();
//@session_register("inl_user");
//@session_register("inl_pass");
//@session_register("inl_id");
//@$HTTP_SESSION_VARS["inl_user"] = $_POST['loginname'];
//@$HTTP_SESSION_VARS["inl_pass"] = $_POST['loginpass'];
//@$HTTP_SESSION_VARS["inl_id"] = $data["id"];

               echo("Du loggas in...");
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('start.php')");
               //echo("</script>");
	}
 }
else{
	echo "Fel uppgifter";
      }
	echo "Fel uppgifter";
 }

if($antalhits=='0')
echo "Fel uppgifter";

}

I start.php som inkluderar top.php där sessionen ska skrivas ut, fungerar det inte. Men i test-filen fungerar det.. Där har jag session_start() också. Det kan jag inte ha i top.php. Varför vet jag inte.. Det måste vara pga. att jag inte har det med som det inte fungerar men den visar bara fel om jag lägger till det..

Medlem sedan juli 2002405 inlägg
#15

Nu skriver den ut varibabeln OCH felmeddelandet.. Så nu behövs det bara någonting som tar bort detta:

Inloggad som:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/httpd.www/top.php:16) in /customers/httpd.www/top.php on line 19

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/httpd.www/top.php:16) in /customers/httpd.www/top.php on line 19
"användarnamn"

Medlem sedan juli 2002405 inlägg
#16

Jag satte @ framför session_start(); och då försvann det.. Så jag hoppas att det ska fungera nu.. Tack för hjälpen SPiN och Matte!

Hör av mig om det fortfarande strular..

Medlem sedan juni 2003372 inlägg
#17

filipbh skrev:

Nu skriver den ut varibabeln OCH felmeddelandet.. Så nu behövs det bara någonting som tar bort detta:

Inloggad som:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/httpd.www/top.php:16) in /customers/httpd.www/top.php on line 19

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/httpd.www/top.php:16) in /customers/httpd.www/top.php on line 19
"användarnamn"

Det betyder att du skickar någonting till klienten innan du anropar session_start().

Gör så att på de sidor du använder sessioner (med hjälpa av cookies) lägg in session_start() allra överst på sidan, ha inte ens en radbrytning innan din första <? tagg, då ska den inte spotta ur sig såna felmeddelanden.

Medlem sedan juli 2002405 inlägg
#18

Okej... Men vad är det för fel på det här då?

$sql = "SELECT * FROM tabell WHERE id='" . $_SESSION[inl_id] . "'\"";

Tycker det är rättkodat

Medlem sedan juli 2002405 inlägg
#19

Hittade det.. Det märks att jag har suttit för länge med det här nu. Börjar göra massa enkla misstag. Tack för hjälpen nu bör allt fungera!

262 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)