Как автоматически выйти из системы, используя $ _SESSION или JS таймер? - PullRequest
0 голосов
/ 21 сентября 2011

Я прочитал тему, но понятия не имею, с чего начать каким будет первый шаг? у меня есть этот код, который вызывается первым: rclayout.php

<!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" xml:lang="en" lang="en">
<head>
    <?php include_http_metas() ?>
    <?php include_metas() ?>
    <?php include_title() ?>
    <link rel="shortcut icon" href="/favicon.ico" />
    <?php use_stylesheet('rainbow.css');  ?>
    <?php use_javascript('rainbow.js'); ?>
    <?php include_stylesheets(); ?> 
    <?php include_javascripts(); ?>
</head>
<body onload='ax_startup();'>   
<center>
    <?php
       echo "<div id='div_main_container_rc'>"; 
    ?>
<div id='div_header_container_rc'>
   <?php include_component('profile','header'); ?>
</div>
    <?php       
            echo "<div id='div_content_container_rc'>";
            echo $sf_content;
            echo "</div>";
            echo "<div id='div_footer'>";
    ?>
   //show a footer menu here
</div>  
</div> 
</center>
 </body>
 </html>

затем _header.php проверяет, вошел ли пользователь в систему:

<?php
$USR_IS_ADMIN = false;
$USR_AUTH     = false;

if($sf_user->hasAttribute('ADMIN'))
{
    $USR_IS_ADMIN = true;
}
    $id = $sf_user->getAttribute('profile_id');

    if($sf_user->hasAttribute('profile_id') > 0)
{   
      $profile = RcProfileTablePeer::getById($id);
      $activated = $profile->getActivated();
       if($activated == 1)
       {
        //echo "activated".$activated;
        $USR_AUTH = true;
       }
       else
       {
        //echo "NOT activated".$activated;
    $USR_AUTH = false;
        }
}
   ?>
   <?php if(!$USR_AUTH) : ?>
       //show a specific menu here   
   <?php endif;?>

  <?php if($USR_AUTH):?>
      //show a different menu here pertaining to logged in user
  <?php endif;?>

мой ОБНОВЛЕННЫЙ файл factories.yml:

prod:
  logger:
  class:   sfNoLogger
  param:
    level:   err
    loggers: ~

test:
  storage:
  class: sfSessionTestStorage
  param:
    session_path: %SF_TEST_CACHE_DIR%/sessions

response: 
  class: sfWebResponse
  param:
    send_http_headers: false

mailer:
  param:
    delivery_strategy: none

dev:
  mailer:
  param:
    delivery_strategy: none

all:
  routing:
  class: sfPatternRouting
  param:
    generate_shortest_url:            true
    extra_parameters_as_query_string: true

  view_cache_manager:
    class: sfViewCacheManager
    param:
      cache_key_use_vary_headers: true
      cache_key_use_host_name:    true

user:
  param:
     timeout: 300

с чего мне начать, как мне это сделать? я нигде не вижу сессионного набора настроить файл php.ini и если да, то как? или я делаю это с сеансом?

пожалуйста, помогите? спасибо

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Просто уничтожьте ваши сеансовые переменные, когда хотите, с помощью session_destroy(). если вы не знаете, какие сессионные переменные установлены, вы можете использовать что-то вроде этого, чтобы распечатать их

 <?php 
 session_start(); 
 Print_r ($_SESSION);
 ?>

Если вы хотите выйти из системы пользователя, вам необходимо unset() для идентификатора пользователя тоже посмотреть руководство по php

http://php.net/manual/en/function.session-destroy.php (читать описание)

0 голосов
/ 21 сентября 2011

По умолчанию PHP использует механизм сессии PHP.Этот сеанс настраивается через factories.yml.Конфигурация по умолчанию выглядит следующим образом:

  user:
    class: myUser
    param:
      timeout:         1800
      logging:         %SF_LOGGING_ENABLED%
      use_flash:       true
      default_culture: %SF_DEFAULT_CULTURE%

Таким образом, по умолчанию сеанс автоматически отключается через 1800 секунд (= 30 минут).

Ваш собственный factories.yml отменяет значение по умолчаниюfactories.yml от Symfony (который можно найти в /lib/vendor/symfony/lib/config).В этом factories .yml the user factory is defined like above. So if that configuration is sufficient for you, you don't have to anything. If you want to change the timeout, you can override the appropriate lines in your own factories.yml . In that case you can add to following lines to your own factories.yml`:

  user:
    param:
      timeout:         900  # log out after 15 minutes

О, и я действительно настоятельно рекомендую вам не видеть логику в _header.php.Весь код PHP со структурами if / else должен быть в components.class.php, а представление te (_header.php) должно быть только просмотром данных.

Так что-то вроде этого:

Контроллер:

// components.class.php
public function executeHeader() {

    // code here...
    $this->isAuthenticated = true/false;
} 

Вид:

 <?php if ($isAuthenticated): ?>
 ...
 <?php enif; ?>
 <?php if (!$isAuthenticated): ?>
 ...
 <?php enif; ?>

Гораздо чище, и он отделяет вид от логики ...: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...