Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как настроить работу сессий?


Автор: Skaner 22.5.2012, 20:47
Всем привет! Скажите пожалуйста как в Xampp включить поддержку сессий?Запускаю скрипт с сессиями а он не работает.Помогите пожалуйста.

Автор: zodiac 22.5.2012, 23:06
Код в студию

Автор: skyboy 22.5.2012, 23:11
что значит "а он не работает"?
у меня после запуска XAMP отлично работает с сессиями.

Автор: Skaner 23.5.2012, 00:44
Например если записать вот такой вот код и потом обратится к этому файлу то просто выдаст пустой экран!

Код

<?
session_start();
$_SESSION['test']='Hello world!';
?>

Автор: Vardoulacha 23.5.2012, 05:03
а так?

Код

<?
session_start();
$_SESSION['test']='Hello world!';
echo $_SESSION['test'];
?>

Автор: Skaner 23.5.2012, 14:51
Цитата

а так?

код PHP
<?
session_start();
$_SESSION['test']='Hello world!';
echo $_SESSION['test'];
?>



Так работает.Хм странно.Почему-то у меня при входе в админку в моем скрипте выбрасывает на главную страницу сайта.Помогите пожалуйста разобраться.Вот код файла для входа в админку.

Код

<?php
require( dirname(__FILE__).'/ib_config.php');

$action= (isset($_POST['action'])) ? $_POST['action'] : 'login';
$title="Login page";

switch($action) {
        case 'login' :
        $is_loged_in=false;
        $user_login='';
        $user_pass='';
        $error='';
        if ( $_POST ) {
                $username=trim($_POST['log']);
                $username = sanitize_user($username);
                $password=trim($_POST['pwd']);
                //bigin check login
                $redir_to=get_settings('general','siteurl')."/ib_admin/index.php";

$sql="SELECT count(unauth_login) as falses FROM ".$ibcms->unauth." WHERE
unauth_logintime>DATE_SUB(NOW(),INTERVAL 1 HOUR) AND unauth_ip='$REMOTE_ADDR'";
$errors = @mysql_result(mysql_query($sql),0);

 if (mysql_error())
 die(mysql_error());

     elseif ($errors>5) {
     $ibcms->db_error="Access denied! Try to login from an hour!";
     }

     elseif($username=='' || $password==''){
                $ibcms->db_error="Enter login and password!";
                }
     else {
     $sql="SELECT * FROM ".$ibcms->users." WHERE
     user_login='$username' AND user_pass='". md5($password). "'";
     $result = mysql_query($sql);

     if (mysql_error()) die(mysql_error());

     elseif (@mysql_num_rows($result)!=1){
     $ibcms->db_error="Wrong username or password!";
     $sql="INSERT INTO ".$ibcms->unauth." (unauth_login, unauth_pass, unauth_ip, unauth_logintime) VALUES
     ('$username', '".md5($password)."', '$REMOTE_ADDR $HTTP_X_FORWARDED_FOR', '".date('Y-m-d H:i:s',mktime())."')";
     @mysql_query($sql);
     }
     else {
     $data = mysql_fetch_assoc($result);
     mysql_free_result($result);
     //session_set_cookie_params(1800, "/");
     session_start();
     session_register('user');
     $user['login']=$data['user_login'];
     $user['pass']=$data['user_pass'];
     $user['status']=$data['user_status'];

     header("Location: {$redir_to}");
     exit();
     }
     }
     if (isset($_COOKIE[session_name()]))
     setcookie(session_name(),'');
     unset($user);
     //end check login
                }
      nocache_headers();
        ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="ib_admin/admin.css" type="text/css">
</head>
<body>
<div align="center">
<h3>Login:</h3>
 <div id="logo"></div>
 <div id="error_mes">
 <?php echo $ibcms->db_error; ?>
 </div>
 <div id="login_form">
  <form name="loginform" id="loginform" action="ib_admin.php" method="post">
   <p>Username&nbsp;:<br>
    <input type="text" name="log" id="log" value="" size="20"/>
   </p>
   <p>Password&nbsp;:<br>
    <input type="password" name="pwd" id="pwd" value="" size="20"/>
   </p>
   <p>
    <input type="submit" name="submit" id="submit" value="Login"/>
   </p>
  </form>
   <!--<p><a href="/ib_admin.php?action=lostpas">Lost your password?</a></p>-->
 </div>
</div>
</body>
</html>
        <?php
        break;
        }
function check_login($username, $password, $already_md5 = false) {

global $ibcms;


     }
?>


Помогите пожалуйста.Если нужен код ещё какого-то файла выложу без проблем.Спасибо за помощь.

Автор: Skaner 24.5.2012, 16:01
Помогите пожалуйста решить проблему :(

Автор: baldina 24.5.2012, 17:18
Цитата(Skaner @  23.5.2012,  14:51 Найти цитируемый пост)
                $redir_to=get_settings('general','siteurl')."/ib_admin/index.php";

Цитата(Skaner @  23.5.2012,  14:51 Найти цитируемый пост)
     header("Location: {$redir_to}");

проверяй чему и почему у тебя равен $redir_to

Автор: Skaner 24.5.2012, 17:34
Вот код файла index.php на который идет redirect

Код

<?php
require_once("admin.php");
require_once("admin_menu.php");
 
function get_main_users_stat() {
        $f="counter.dat";
        $f=fopen($f,'r');
        flock($f,LOCK_SH);
        $st=fread($f,100);
        flock($f,LOCK_UN);
        fclose($f);
        $st=explode('|',$st);
        $st[0]=(int)$st[0];
        $st[1]=(int)$st[1];
        $st[2]=(int)$st[2];
        return $st;
        }
 
function get_subs_stat() {
        global $ibcms;
        $month=date('m'); $year=date('Y');
        $month=$month-1;
        if ($month==0) {
                $month=12;
                $year=$year-1;
                }
        $sql="SELECT * FROM ".$ibcms->stats." WHERE
        stat_from='".date('Y-m-d',mktime(0,0,0,$month,1,$year))."'";
        $result=$ibcms->query($sql);
        if (is_array($result)) {
 
                } else {
 
                        }
        $sql="SELECT count(id) FROM ".$ibcms->mailer." WHERE
        active='0' AND unregistered<'".date('Y-m-d',mktime(0,0,0,$month,1,$year))." 00:00:00'";
 
        }
 
function get_subscribers() {
        global $ibcms;
       
        $sql1="SELECT COUNT(id) FROM ".$ibcms->mailer." WHERE ";
        $sql[]=$sql1."active='1'";
        $from[0]=time(); $to[0]=$from[0]+24*60*60;
        $from[1]=time()-24*60*60; $to[1]=time();
        $weekday=date('w');
        $weekday=$weekday-1;
        if ($weekday==-1) $weekday=6;
        $from[2]=time()-$weekday*24*60*60; $to[2]=$from[2]+7*24*60*60;
        $from[3]=$from[2]-7*24*60*60; $to[3]=$from[3]+7*24*60*60;
        $from[4]=mktime(0,0,0,date('m'),1,date('Y')); $to[4]=$from[4]+date('t')*24*60*60;
        $month=date('m'); $year=date('Y');
        $month=$month-1;
        if ($month==0) {
                $month=12;
                $year=$year-1;
                }
        $from[5]=mktime(0,0,0,$month,1,$year); $to[5]=$from[5]+date('t',mktime(0,0,0,$month,1,$year))*24*60*60;
        for ($i=0; $i<count($from); $i++) {
              //echo date('Y-m-d',$from[$i])."to ".date('Y-m-d',$to[$i])."<br>";
        $sql[]=$sql1."registered>='".date('Y-m-d',$from[$i])." 00:00:00' AND
        registered<'".date('Y-m-d',$to[$i])." 00:00:00'";
        $sql[]=$sql1."active='0' AND unregistered>='".date('Y-m-d',$from[$i])." 00:00:00' AND
        unregistered<'".date('Y-m-d',$to[$i])." 00:00:00'";
                }
        foreach ($sql as $key) {
        $result=$ibcms->query($key);
        if (is_array($result)) $arr[]=$result[0][0];
        else $arr[]=0;
                }
        return $arr;
        }
 
list($online, $today, $total)=get_main_users_stat();
list($sub_act, $sub_reg_today, $sub_unreg_today, $sub_reg_yest,
$sub_unreg_yest, $sub_reg_thisweek, $sub_unreg_thisweek,
$sub_reg_lastweek, $sub_unreg_lastweek,
$sub_reg_thismonth, $sub_unreg_thismonth,
$sub_reg_lastmonth, $sub_unreg_lastmonth)=get_subscribers();
 
require_once("admin_header.php");
?>
  <tr>
  <td>
    <div id="admin_body">
    <div id="stat">
      <table border=1 cellpadding=0 callspacing=0 width=100%>
      <tr>
        <td>Users activity :</td><td></td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td>Users(visitors):</td><td>Online:</td><td><b><?php echo $online; ?></b></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Today:</td><td><b><?php echo $today; ?></b></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Yesterday:</td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Last week:</td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Last month:</td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Total:</td><td><b><?php echo $total; ?></b></td><td></td><td></td>
      </tr>
      <tr>
        <td></td><td>Record number of visitors was</td><td></td><td>Number</td><td></td>
      </tr>
      <tr>
        <td>Music :</td><td></td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td>Leader of Top20:</td><td>Today</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Yesterday</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last week</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last month</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>All time</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td>Looser of Top20:</td><td>Today</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Yesterday</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last week</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last month</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td></td><td>All time</td><td></td><td>Voted</td><td></td>
      </tr>
      <tr>
        <td>Banners :</td><td></td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td>More popular:</td><td>Today</td><td></td><td>Clicks</td><td></td>
      </tr>
      <tr>
        <td></td><td>Yesterday</td><td></td><td>Clicks</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last week</td><td></td><td>Clicks</td><td></td>
      </tr>
      <tr>
        <td></td><td>Last month</td><td></td><td>Clicks</td><td></td>
      </tr>
      <tr>
        <td></td><td>All time</td><td></td><td>Clicks</td><td></td>
      </tr>
      <tr>
        <td>Subscribers :</td><td></td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td>Active subscribers:</td><td><?php echo $sub_act;?></td><td></td><td></td><td></td>
      </tr>
      <tr>
        <td>New subscribers:</td><td>Today</td><td><?php echo $sub_reg_today;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_today;?></td>
      </tr>
      <tr>
        <td></td><td>Yesterday</td><td><?php echo $sub_reg_yest;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_yest;?></td>
      </tr>
      <tr>
        <td></td><td>This week</td><td><?php echo $sub_reg_thisweek;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_thisweek;?></td>
      </tr>
      <tr>
        <td></td><td>Last week</td><td><?php echo $sub_reg_lastweek;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_lastweek;?></td>
      </tr>
      <tr>
        <td></td><td>This month</td><td><?php echo $sub_reg_thismonth;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_thismonth;?></td>
      </tr>
      <tr>
        <td></td><td>Last month</td><td><?php echo $sub_reg_lastmonth;?></td><td>Unsubscribed</td><td><?php echo $sub_unreg_lastmonth;?></td>
      </tr>
      <tr>
        <td></td><td>All time:</td><td></td><td>Unsubscribed</td><td></td>
      </tr>
      </table>
    </div>
    </div>
  </td>
  </tr>
<?php
require_once("admin_footer.php");
?>


Код файла admin.php

Код

<?php
require('../ib_config.php');
$session_error = false;
 
if (!isset($_COOKIE[session_name()]))
  $session_error = true;
 
else {
  session_start();
  session_register("user");
 
  if (!isset($user["login"]) || !isset($user["pass"]) || !isset($user["status"]))
    $session_error = true;
  };
 
if (!$session_error) {
  $sql="SELECT user_id FROM ".$ibcms->users." WHERE
    user_login='{$user['login']}' AND user_pass='{$user['pass']}'
    AND user_status='{$user['status']}'";
  $check_result = mysql_query($sql);
 
  if (mysql_error() || @mysql_num_rows($check_result) != 1)
    $session_error = true;
  };
 
if ($session_error) {
 
  @session_destroy();
 
  if (isset($_COOKIE[session_name()]))
    @setcookie(session_name(),"","/");
 
  @header("Location: ".get_settings('general','siteurl'));
 
  exit();
  };
 
mysql_free_result($check_result);
?>

Автор: baldina 24.5.2012, 17:43
Цитата(Skaner @  24.5.2012,  17:34 Найти цитируемый пост)
  if (!isset($user["login"]) || !isset($user["pass"]) || !isset($user["status"]))
    $session_error = true;


Цитата(Skaner @  24.5.2012,  17:34 Найти цитируемый пост)
if ($session_error) {


Цитата(Skaner @  24.5.2012,  17:34 Найти цитируемый пост)
 @header("Location: ".get_settings('general','siteurl'));


Автор: Skaner 24.5.2012, 17:46
Что здесь не так?

Автор: baldina 24.5.2012, 17:52
здесь все так, просто это те места, которые вероятно влияют на результат
или вы думаете я телепатически отлажу вашу программу?
кстати, код явно старый, а какой версии php? (скажем, в php 5.4 это работать не будет)

Автор: Skaner 24.5.2012, 17:59
Php версии 5.1.6 какие ещё участки кода интересуют? Могу выложить без проблем.

Автор: baldina 24.5.2012, 18:14
меня - никакие. проверяйте что у вас с переменной user

Автор: Sanchezzz 24.5.2012, 19:35
кажись у вас не пишутся куки вот скрипт и вызывает дестрой сесии на 26-28 строчке так как переменая $session_error  равна true

Автор: Skaner 24.5.2012, 19:50
Странно.Закоментировал все это дело.И сделал такой тест
Код

if ($session_error) {

  //@session_destroy();

  //if (isset($_COOKIE[session_name()]))
  //  @setcookie(session_name(),"","/");

  //@header("Location: ".get_settings('general','siteurl'));
  die("Session error!");
  //exit();
  };


Надпись Session error! вывелась на экран.Где может быть проблема?В сессиях?

Автор: Skaner 25.5.2012, 04:21
Всем привет! Закомментировал данное условие
Код

if ($session_error) {
 
  @session_destroy();
 
  if (isset($_COOKIE[session_name()]))
    @setcookie(session_name(),"","/");
 
  @header("Location: ".get_settings('general','siteurl'));
 
  exit();
  };
 
mysql_free_result($check_result);


В админку зашел,но некоторые функции не работают :( Что не так в этом условии?Почему с ним не работает?

Автор: ksnk 25.5.2012, 08:24
session_error устанавливает есть ли в сессии некоторые переменные. В случае если их нет - сессия прибивается. Проверка производится СРАЗУ после создания сессии и ДО ее заполнения нужными значениями.

Вообще - зачем  уничтожать сессию?

Автор: Skaner 25.5.2012, 12:27
С ними не работает.Что можно в xampp настроить?

Автор: Sanchezzz 26.5.2012, 09:31
данное условие уничтожает сессию и водит куку в просроченное время так как 3 параметр функции http://www.php.net/manual/ru/function.setcookie.php, задает время жизни куки что при не верном заполнении будет 1970 год 1 января в формате unix_time...

Далее смотрим почему нас выкидывает сразу и постоянно

Код

<?php
require('../ib_config.php'); //тут не известно что 
$session_error = false;
 
if (!isset($_COOKIE[session_name()]))  // идет проверка если нету в куке SID сессии session_id()  устанавливаем переменную session_error в тру
  $session_error = true;
 
else {
  session_start(); // иначе запускаем  механизм сессии 
  session_register("user");  // регистрируемым глобальную переменную в сесси и как переименую user
 
// если в следующих переменных не существует то session_error тру
  if (!isset($user["login"]) || !isset($user["pass"]) || !isset($user["status"]))
    $session_error = true;
  };
 
// если session_error  не тру проверяем пользователя на авторизацию подставляя значения из глобальной переменной узер
if (!$session_error) {
  $sql="SELECT user_id FROM ".$ibcms->users." WHERE
    user_login='{$user['login']}' AND user_pass='{$user['pass']}'
    AND user_status='{$user['status']}'";
  $check_result = mysql_query($sql);
 
// если в азе нет данных значит логи или пароль не верный 
  if (mysql_error() || @mysql_num_rows($check_result) != 1)
    $session_error = true;
  };
 
// самое интересное если session_error тру уничтожаем сессию и куку
if ($session_error) {
 
  @session_destroy();
 
  if (isset($_COOKIE[session_name()]))
    @setcookie(session_name(),"","/");
 
//какой то редерект на спинальную страницу 
  @header("Location: ".get_settings('general','siteurl'));
 
  exit();
  };
 //освобождаем память вообще херня лишняя если кода дальше нету 
mysql_free_result($check_result);
?>


с точки зрения код валиднный но я не вижу авторизацию и где устанавливается куки чтобы session_error  не переводить в тру, смотрите код где у вас форма авторизации где в куки пишется сид сессии а в сесиию запихиваются данные

Автор: baldina 26.5.2012, 09:41
Цитата(Sanchezzz @  26.5.2012,  09:31 Найти цитируемый пост)
я не вижу авторизацию и где устанавливается куки чтобы session_error  не переводить в тру

читайте первый пост.
но все это бесполезные советы для ТС, он не умеет...((

Автор: Sanchezzz 26.5.2012, 09:41
посмотрев еще код этого http://forum.vingrad.ru/index.php?showtopic=352272&view=findpost&p=2491610 я не нашел где у вас устанавливается кука чтобы при выше описанном вашем коде вашу сессию не уничтожало

вставьте ниже этих строчек, 50 строка
Код

  session_start();
     session_register('user');
     $user['login']=$data['user_login'];
     $user['pass']=$data['user_pass'];
     $user['status']=$data['user_status'];

это
Код

setcookie(session_name(),"1", time() + 800);


Добавлено через 4 минуты и 8 секунд
baldina Ну для этого TS к нам на форум обратился я чем смог тем и помог:)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)