Just nu i M3-nätverket
Jump to content

Knepigt med sessions


dampdampdamp

Recommended Posts

Hej hopp! Jag har ett litet nybörjarproblem med sessions. Jag har skapat en loginpryttel till en sida, mha en form. Formen validerar lösen+användare, om det stämmer, skickas användaren vidare till förstasidan som visas som den ska, jättebra. MEN. Om jag ska gå till nån annan länk på sidan, så kommer logingrejen upp igen, och jag får logga in, SEN visas den nya sidan jag ville gå till. Jag har helt klart gjort fel nånstans, men var och vad? :) Här är kod:

 

index.php

<?

$site = "inc/site/site.php";

 

$_username = "användarnamn";

$_password = "lösenord";

 

$username = $_POST['username'];

$password = $_POST['password'];

 

if($_POST['submit']) {

if($_POST['username'] == $_username && $_POST['password'] ==

$_password) {

session_start();

session_register("inside");

$_SESSION['user_inside'] = $username;

 

}

//Det här funkar jättebra, $site är alltså ett ramverk med lite bilder och text som //includeas. Den innehåller en switch, som laddar sidor dårå.

//switch($_GET["do"]) { case "annansida": include "annansida.php"; break; Länk blir så

//här index.php?do=annansida. Innan man kommer in på annansida får man logga in

//igen. Det vill jag hantera med sessions, men jag har som sagt gjort fel nånstans.

 

include($site);

echo "Inloggad som: "; echo $_SESSION['user_inside'];

 

} else {

 

?>

 

<form method="post" action="<? $PHP_SELF ?>">

Användarnamn: <input type="text" name="username"><br>

Lösenord: <input type="password" name="password"><br>

<input type="submit" name="submit" value="Skicka">

 

<?

}

?>

 

annansida.php

 

<?

session_start();

if(!session_is_registered("inside")) {

session_unset();

session_destroy();

$back = "Location: index.php";

header($back);

} else {

 

$write = "inc/txt/ride_write.php";

$read = "inc/txt/ride_read.php";

$main = "inc/txt/ride_main.php";

 

if (!isset($_GET["action"])) die(include($main));

 

switch ($_GET["action"]) {

case "read":

include($read);

break;

 

case "write":

include($write);

break;

 

default:

 

include("inc/404/404.php");

}

}

?>

 

 

 

Link to comment
Share on other sites

Inte nån riktigt hjälp med just din kod kanske, men jag brukar bara ha session_start() i början av alla php-filer och sen sätta en flagga som talar om att man är inloggad när man väl verifierat lösenordet. Jag använder aldrig de andra session-funktioenrna.

 

<?[color="#0000ff"]php[/color]
[color="#ff0000"]session_start[/color]();

[color="#0000ff"]if[/color]([color="#0000ff"]$[/color]_POST['username'] .... ) {
  $logged_in = [color="#ff8C00"]TRUE[/color];
}

[color="#0000ff"]if[/color]!$login) {
  [color="#006400"]// Skriv ut formuläret[/color]
}

[color="#0000ff"]if[/color]($logged_in) {
  [color="#006400"]// Gör nåt annat[/color]
}

 

OBS: Koden är bara tänkt att visa iden.

 

Link to comment
Share on other sites

session_register("inside");
session_register är ett "gammalt" sätt att registrera sessionsvariabler. Den fungerar men är inte nödvändig. I dokumentationen står det dessutom:

 

If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

http://se.php.net/manual/sv/function.session-register.php

 

 

-----

 

index.php

<?

$site = "inc/site/site.php";

 

$_username = "användarnamn";

$_password = "lösenord";

 

....

Startar du sessionen även på första sidan där variablerna tilldelas?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...