Thursday, November 19, 2009

Auth component IE (Internet explorer) cache problem (Session gets destroy in IE)

I am using auth component for user authentication. I am creating force
logout functionality in my application. If user with same username and
password logged in from one machine and another user try to log in
using same user name and password from another machine. he/she will
see force logout option under login form. if he/she click on that.
first user gets logout. I am doing this using database table. above
functionality works great in firefox but not in IE 7. In IE when i
click on force logout, auth gives me na error "You are not authorized
to access that location."
Apache log gives me 302 error.


I have changed following part of session in core.php but still it is
not working .......
Configure::write('Security.level', 'low');
Configure::write('Session.checkAgent', false);

And following are unchanged sessions configuration from core.php
Configure::write('Session.save', 'php');
Configure::write('Session.cookie', 'CAKEPHP');
Configure::write('Session.timeout', '120');
Configure::write('Session.start', true);
---------------------------------------------------------------------------------------------------
[B]AppController[/B]
[CODE]
class AppController extends Controller
{
var $components = array('Auth', 'Cookie', 'RequestHandler');

var $helpers = array('Html', 'Form', 'Javascript',
'Ajax','Time');

function beforeFilter()
{
$this->Auth->loginRedirect = array('plugin' =>
null,'controller' => 'questions', 'action' => 'home');
$this->Auth->logoutRedirect = array('plugin' =>
null,'controller'=> 'users', 'action' => 'login');
$this->Auth->allow('signup', 'confirm', 'home',
'show','questionlist');

$this->Auth->authorize = 'controller';

$this->Auth->userScope = array('User.confirmed' =>
'1');
$this->set('loggedIn', $this->Auth->user('id'));
$this->Auth->autoRedirect = false;
$this->Cookie->name = 'QuickWall';
if(!$this->Auth->user('id'))
{
$cookie = $this->Cookie->read('User');
if($cookie)
{
$this->Auth->login($cookie);
}
}
else
{
if(!ClassRegistry::init('TrackSession')-
>getMyAccess($this->Auth->user('id'),$this->Session->id()) && $this-
>params['action'] !='forceLogout' && !$this->RequestHandler->isAjax())
{
$this->redirect($this->Auth->logout
());
}
}
}
[/CODE]
UserController.php login action
[CODE] function login()
{

if ($this->Auth->user())
{
if (!empty($this->data))
{
$this->User->set($this->data);
if (empty($this->data['User']['remember_me']))
{
$this->Cookie->del('User');
}
else
{
$cookie = array();
$cookie['username'] = $this->data
['User']['username'];
$cookie['password'] = $this->data
['User']['password'];
$this->Cookie->write('User', $cookie,
true,'+2 weeks');
}
unset($this->data['User']['remember_me']);

$this->Session->write('username', $this->data
['User']['username']);

if(!ClassRegistry::init('TrackSession')-
>getMyStatus($this->Auth->user('id')))
{

$this->User->logTrackSession($this-
>Auth->user('id'),
$this->data
['User']['username'],
$this->Session-
>id(),
$this-
>RequestHandler->getClientIP());
$this->User->trackSession($this->Auth-
>user
('id'),
$this->Session->id(),
$this-
>RequestHandler->getClientIP());

$this->redirect($this->Auth->redirect
());
}
else
{
$this->set('force_logout_error',
'ForceLogout');
unset($this->data['User']
['password']);
//$this->redirect($this->Auth->login
());
}

}
}

$this->set('menuTab', 'login');
}
[/CODE]
---------------------------------------------------------------------------------------------------------------------
UserController.php forceLogout(action)
[CODE]
function forceLogout()
{

$username = $this->Session->read('username');

$this->User->logTrackSession($this->Auth->user('id'),
$username,
$this->Session-
>id(),
$this-
>RequestHandler->getClientIP());
$this->User->trackSession($this->Auth->user
('id'),
$this->Session->id(),
$this->RequestHandler->getClientIP
());

$this->redirect($this->Auth->redirect());

}
[/CODE]
---------------------------------------------------------------------------------------------------------------------------------
view/user/login.ctp
[CODE]

<h2>Log In To Quickwall</h2>
<?php
if ($session->check('Message.auth')):
$session->flash('auth');
endif;
?>
<?php e($form->create('User', array('action' => 'login')));?>
<fieldset>
<div class="input text">
<label for="UserUsername" class="usernamelabel"><span>
Your Name</span></label>
<?php e($form->text('username', array('class'
=> 'fullwidth'))); ?>
</div>
<div class="input text">
<label for="UserPassword" class="emaillabel"><span>Password
</span></label>
<?php e($form->password('password', array('class'
=> 'fullwidth'))); ?>
</div>
<div class="input text">
<label for="UserRememberMe" class="passwordlabel"><span>
Remember Me</span></label>
<p><?php e($form->checkbox('remember_me', array('class'
=> 'bigcheck'))) ?></p>
</div>

<?php e($form->submit('Login In', array('div' => false,
'class' => 'submitbutton'))); ?>
</fieldset>
<?php
if (isset($force_logout_error))
{
echo "you have already logged in.";
e($html->link('ForceLogout', array('plugin' =>
null,'controller' => 'users', 'action' => 'forceLogout')));
}
?>
<?php e($form->end()); ?>

[/CODE]
--------------------------------------------------------------------------------------------------------------------
/app/models/track_session.php
[CODE]

class TrackSession extends AppModel
{

public $useTable = 'TrackSession';

public $validate = array(
'UserID' => 'notEmpty',
'LoginSessionID' => 'notEmpty'
);

public function getList()
{
return $this->find('all', array('order' =>
'LogTrackSession.Status ASC'
));
}
public function getMyAccess($user_id, $session_id)
{
$access = $this->find('all', array(
'conditions' => array('TrackSession.UserID' =>
$user_id,

'TrackSession.LoginSessionID' => $session_id)

));

if (empty($access))
return false;
else
return true;

}
public function getMyStatus($user_id)
{

$status = $this->find('count', array(
'conditions' => array(
'TrackSession.UserID' => $user_id,
'TrackSession.Status' => 1
)
));

if (empty($status))
return false;
else
return true;

}
public function setMyStatus($user_id, $value = 0)
{
$fields = array('TrackSession.Status'=>$value);
$conditions = array('TrackSession.UserID'=>$user_id);

$this->updateAll($fields, $conditions);
}
}

[/CODE]

--

You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/cake-php?hl=.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate