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
Hjälp med sessions?
24 svar · 1 275 visningar · startad av 1945-an
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?
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.
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å.
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'\]);
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.
<?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.
*/
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?
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?
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");
}
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.
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();
}
?>
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.
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.
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");
:-(
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"> </td>
</tr>
<tr>
<td width="160" valign="top"><p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p></td>
<td width="732" valign="top"><p> </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"> </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"> </p>
</form>
<p> </p>
</td>
<td width="196" valign="top"> </td>
</tr>
<tr>
<td colspan="3"> </td>
</tr>
</table>
<br />
<a href="http://www.sfk-kroken.nu/"><strong> Tillbaka till sfk-kroken!</strong></a>
</body>
</html>
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.
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();
}
?>
Dessutom bör session_start(); finns HÖGST UPP i resp. fil.
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.