webForumDet fria alternativet

Hjälp med sessions?

PHPur PHP

24 svar · 1 275 visningar · startad av 1945-an

1945-anMedlem sedan sep. 200533 inlägg
#1

Jag har använt mig av Peddas kalender och ett loginscript från ett annat ställe. Loginscriptet är databasbaserat och fungerar.
Nu skulle jag vilja lägga till en koll i kalendern så att personen som är inne i kalendern verkligen är inloggad.
Jag är urusel på det mesta i kodväg men i synnerhet på PHP.
Finns det någon som kan hjälpa mej?
Man ska tydligen använda sessions.
:q

@ndersMedlem sedan juni 200032 969 inlägg
#2

Jag flyttade ditt inlägg till en egen tråd.

mvh

1945-anMedlem sedan sep. 200533 inlägg
#3

Ser inte ut som om jag får någon hjälp med detta.
Har jag inte förklarat tillräckligt bra vad jag vill ha hjälp med?

CompusaMedlem sedan jan. 20023 327 inlägg
#4

Du borde ju kunna lista ut hur du ska gör om du tittar på koden för loginscriptet. Bäst hjälp får du nog om du bifogar/postar lite kod.

PeddaMedlem sedan juni 20006 032 inlägg
#5

För att kunna hjälpa dig måste vi veta vad sessionerna från login scriptet heter.
Så kan du inte lista ut det så får du lägga upp lite kod som vi kan titta på.

1945-anMedlem sedan sep. 200533 inlägg
#6

Ok, det är en farlig massa kod i loginscriptet.
Vad jag är ute efter är en liten kodsnutt som jag lägger i kalenderscriptet och som kollar i databasen om personen som går in i kalendern är inloggad.
Jag behöver se hur strukturen, syntax, i en sådan sessions ser ut.
Uppgifterna till databasen klarar jag av själv.

Detta är en del av inloggnings-scriptet:

   // this sets variables in the session 
	$\_SESSION\['user_id'\]= $id;  
	$\_SESSION\['user_name'\] = $full_name;
	$\_SESSION\['user_level'\] = $user_level;
	$\_SESSION\['HTTP_USER_AGENT'\] = md5($\_SERVER\['HTTP_USER_AGENT'\]);
GunnarDMedlem sedan juni 20014 290 inlägg
#7

För att kolla om personen är inloggad så kolla bara om ex.$_SESSION['user_name'] är satt.

Om den är satt så är man inloggad, om den inte är satt så är man inte inloggad.

MangnussonMedlem sedan nov. 20102 inlägg
#8
<?php
session_start();
if(!isset($_SESSION['user_id'], $_SESSION['user_name'], $_SESSION['user_level'])) {
   /** Någonting som händer om användaren inte är inloggad.
    */
}

/** Fortsätt med innehållet som kräver autentisering.
 */
1945-anMedlem sedan sep. 200533 inlägg
#9

Det finns en rutin som heter checkuser.php och den ser ut så här:

<?php

include 'dbc.php';

foreach($_GET as $key => $value) {
	$get[$key] = filter($value);
}

$user = mysql_real_escape_string($get['user']);

if(isset($get['cmd']) && $get['cmd'] == 'check') {

if(!isUserID($user)) {
echo "Invalid User ID";
exit();
}

if(empty($user) && strlen($user) <=3) {
echo "Enter 5 chars or more";
exit();
}

$rs_duplicate = mysql_query("select count(*) as total from users where user_name='$user' ") or die(mysql_error());
list($total) = mysql_fetch_row($rs_duplicate);

	if ($total > 0)
	{
	echo "Not Available";
	} else {
	echo "Available";
	}
}

?>

Skulle jag kunna använda den genom att anropa den med include?

1945-anMedlem sedan sep. 200533 inlägg
#10

GunnarD skrev:

För att kolla om personen är inloggad så kolla bara om ex.$_SESSION['user_name'] är satt.

Om den är satt så är man inloggad, om den inte är satt så är man inte inloggad.

Ok!
Får man en etta/nolla till svar då om personen är inloggad eller ej?

GunnarDMedlem sedan juni 20014 290 inlägg
#11

Mangnusson skrev i inlägget under mitt hur du kan kolla om en sessionvariabel är satt.

Jag brukar köra såhär för att kolla om man är inloggad eller ej, är man inte inloggad så skickas man till inlogningssidan:

<?php
session_start();
if(!isset($_SESSION['user_name'])) {
  header("Location: /login.php");
}
1945-anMedlem sedan sep. 200533 inlägg
#12

Har inte fått det att fungera ännu och det beror mycket på jag inte kan syntaxen.
Försöker titta på andra script för att se hur det ska se ut.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#13

Men du säger ju inte hur du gjort? Har du provat koden som GunnarD skrev ovan:

<?php
session_start();
if(!isset($_SESSION['user_name'])) {
  header("Location: /login.php");
  exit();
}
?>
1945-anMedlem sedan sep. 200533 inlägg
#14

Ja jag har testat den på många olika sätt och får 2 liknande felmeddelande att session redan är skickad. Tar jag bort session start så blir det bara ett felmeddelande.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#15

Gör såhär då:

<?php
@session_start();
if(!isset($_SESSION['user_name'])) {
  header("Location: /login.php");
  exit();
}
?>

@ framför session_start(); gör att PHP inte spottar ur sig ev. fel.

1945-anMedlem sedan sep. 200533 inlägg
#16

Nu blev det bara 1 felmeddelande!
"Warning: Cannot modify header information - headers already sent by (output started at /home/sfkkroken/www/kalender/kalenderstart.php:2) in /home/sfkkroken/www/kalender/kalenderstart.php on line 5".

På rad 5 står: header("Location: /login.php");
:-(

1945-anMedlem sedan sep. 200533 inlägg
#17

När jag är inloggad så kommer jag till kalendern men när jag inte är inloggad får jag det felmeddelandet.

Så här ser login.php ut:

<?php 
/*************** PHP LOGIN SCRIPT V 2.3*********************
(c) Balakrishnan 2009. All Rights Reserved

Usage: This script can be used FREE of charge for any commercial or personal projects. Enjoy!

Limitations:
- This script cannot be sold.
- This script should have copyright notice intact. Dont remove it please...
- This script may not be provided for download except from its original site.

For further usage, please contact me.

***********************************************************/
include 'dbc.php';

$err = array();

foreach($_GET as $key => $value) {
	$get[$key] = filter($value); //get variables are filtered.
}

if ($_POST['doLogin']=='Login')
{

foreach($_POST as $key => $value) {
	$data[$key] = filter($value); // post variables are filtered
}

$user_email = $data['usr_email'];
$pass = $data['pwd'];

if (strpos($user_email,'@') === false) {
    $user_cond = "user_name='$user_email'";
} else {
      $user_cond = "user_email='$user_email'";
    
}

	
$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE 
           $user_cond
			AND `banned` = '0'
			") or die (mysql_error()); 
$num = mysql_num_rows($result);

  // Match row found with more than 1 results  - the user is authenticated. 
    if ( $num > 0 ) { 
	
	list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result);
	
	if(!$approved) {
	//$msg = urlencode("Account not activated. Please check your email for activation code");
	$err[] = "Account not activated. Please check your email for activation code";
	
	//header("Location: login.php?msg=$msg");
	 //exit();
	 }
	 
		//check against salt
	if ($pwd === PwdHash($pass,substr($pwd,0,9))) { 
	if(empty($err)){			

     // this sets session and logs user in  
       session_start();
	   session_regenerate_id (true); //prevent against session fixation attacks.

	   // this sets variables in the session 
		$_SESSION['user_id']= $id;  
		$_SESSION['user_name'] = $full_name;
		$_SESSION['user_level'] = $user_level;
		$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
		
		//update the timestamp and key for cookie
		$stamp = time();
		$ckey = GenKey();
		mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error());
		
		//set a cookie 
		
	   if(isset($_POST['remember'])){
				  setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
				  setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
				  setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/");
				   }
		  header("Location: myaccount.php");
		 }
		}
		else
		{
		//$msg = urlencode("Invalid Login. Please try again with correct user email and password. ");
		$err[] = "Invalid Login. Please try again with correct user email and password.";
		//header("Location: login.php?msg=$msg");
		}
	} else {
		$err[] = "Error - Invalid login. No such user exists";
	  }		
}
					 
					 

?>
<html>
<head>
<title>Members Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script language="JavaScript" type="text/javascript" src="js/jquery.validate.js"></script>
  <script>
  $(document).ready(function(){
    $("#logForm").validate();
  });
  </script>
<link href="styles.css" rel="stylesheet" type="text/css">

</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr> 
    <td width="160" valign="top"><p>&nbsp;</p>
      <p>&nbsp; </p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p></td>
    <td width="732" valign="top"><p>&nbsp;</p>
      <h3 class="titlehdr">Login Users 
      </h3>  
	  <p>
	  <?php
	  /******************** ERROR MESSAGES*************************************************
	  This code is to show error messages 
	  **************************************************************************/
	  if(!empty($err))  {
	   echo "<div class=\"msg\">";
	  foreach ($err as $e) {
	    echo "$e <br>";
	    }
	  echo "</div>";	
	   }
	  /******************************* END ********************************/	  
	  ?></p>
      <form action="login.php" method="post" name="logForm" id="logForm" >
        <table width="65%" border="0" cellpadding="4" cellspacing="4" class="loginform">
          <tr> 
            <td colspan="2">&nbsp;</td>
          </tr>
          <tr> 
            <td width="28%">Username / Email</td>
            <td width="72%"><input name="usr_email" type="text" class="required" id="txtbox" size="25"></td>
          </tr>
          <tr> 
            <td>Password</td>
            <td><input name="pwd" type="password" class="required password" id="txtbox" size="25"></td>
          </tr>
          <tr> 
            <td colspan="2"><div align="center">
                <input name="remember" type="checkbox" id="remember" value="1">
                Remember me</div></td>
          </tr>
          <tr> 
            <td colspan="2"> <div align="center"> 
                <p> 
                  <input name="doLogin" type="submit" id="doLogin3" value="Login">
                </p>
                <p><a href="register.php">Register Free</a><font color="#FF6600"> 
                  |</font> <a href="forgot.php">Forgot Password</a> <font color="#FF6600"> 
                  </font></p>
                <p><span style="font: normal 9px verdana">Powered by <a href="http://php-login-script.com">PHP 
                  Login Script v2.3</a></span></p>
              </div></td>
          </tr>
        </table>
        <div align="center"></div>
        <p align="center">&nbsp; </p>
      </form>
      <p>&nbsp;</p>
	   
      </td>
    <td width="196" valign="top">&nbsp;</td>
  </tr>
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
</table>
<br />
<a href="http://www.sfk-kroken.nu/"><strong> Tillbaka till sfk-kroken!</strong></a>
</body>
</html>
MickeA.comMedlem sedan feb. 20034 441 inlägg
#18

1945-an skrev:

Nu blev det bara 1 felmeddelande!
"Warning: Cannot modify header information - headers already sent by (output started at /home/sfkkroken/www/kalender/kalenderstart.php:2) in /home/sfkkroken/www/kalender/kalenderstart.php on line 5".

På rad 5 står: header("Location: /login.php");
:-(

Men det står ju att "output started at /home/sfkkroken/www/kalender/kalenderstart.php:2", så vad finns på rad 2?

Dessutom bör session_start(); finns HÖGST UPP i resp. fil.

1945-anMedlem sedan sep. 200533 inlägg
#19

Detta ligger först i kalenderstart.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
@session_start();
if(!isset($_SESSION['user_name'])) {
header("Location: /login.php");
exit();
}
?>

MickeA.comMedlem sedan feb. 20034 441 inlägg
#20

MickeA.com skrev:

Dessutom bör session_start(); finns HÖGST UPP i resp. fil.

1945-an skrev:

Detta ligger först i kalenderstart.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
@session_start();
if(!isset($_SESSION['user_name'])) {
header("Location: /login.php");
exit();
}
?>

Alltså, det får inte förekomma en gnutta php -eller htmlkod innan session_start(); eller header();, helst inte ens ett blanksteg, eftersom även det kan ställa till det.

147 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)