How to check JSESSION in javascript
up vote
3
down vote
favorite
I am developing a component and I use ajax calls to do some tasks in the frontend.
I have come to a problem when the session is expires and I don't want to use keepalive to solve it.
In the frontend I have a list view. And there there are some buttons that perform tasks using ajax requests.
For example :
$('#resetData').on('click', function (e) {
e.preventDefault();
var token = jQuery("#token").attr("name");
var itemId = $(this).attr('data-id');
$.ajax({
method: 'POST',
cache: false,
dataType: "json",
data: { [token]: "1", id: itemId},
url: 'index.php?option=com_contract&task=contract.resetData'
}).success(function (r) {
console.log('Response :');
console.log(r);
if (r.responseText) {
UIkit.modal.alert(r.responseText).then(function () {
window.location.reload();
});
}
if (r.message) {
UIkit.modal.alert(r.message).then(function () {
window.location.reload();
});
}
}).error(function (err) {
console.log(err);
UIkit.modal.alert('<div class="alert alert-error">' + err + '</div>').then(function () {
return;
});
}).complete(function (r) {
console.log(r.responseText);
});
When the session has expired, in my main controller I redirect to login page.
JFactory::getApplication()->redirect(JURI::base() . 'index.php?option=com_users&view=login', $error, 'error'); //redirect to login page
This means that the hole html is returned in the Ajax response and when I popup the response I get an [object object]
instead of a human readable error.
I guess I need to find a way to check if the session has expired when click
event fires and alert an error, before I make the Ajax call.
Is it possible to check the JSESSION in javascript or any other way to solve it ?
joomla-3.x javascript ajax jsession
add a comment |
up vote
3
down vote
favorite
I am developing a component and I use ajax calls to do some tasks in the frontend.
I have come to a problem when the session is expires and I don't want to use keepalive to solve it.
In the frontend I have a list view. And there there are some buttons that perform tasks using ajax requests.
For example :
$('#resetData').on('click', function (e) {
e.preventDefault();
var token = jQuery("#token").attr("name");
var itemId = $(this).attr('data-id');
$.ajax({
method: 'POST',
cache: false,
dataType: "json",
data: { [token]: "1", id: itemId},
url: 'index.php?option=com_contract&task=contract.resetData'
}).success(function (r) {
console.log('Response :');
console.log(r);
if (r.responseText) {
UIkit.modal.alert(r.responseText).then(function () {
window.location.reload();
});
}
if (r.message) {
UIkit.modal.alert(r.message).then(function () {
window.location.reload();
});
}
}).error(function (err) {
console.log(err);
UIkit.modal.alert('<div class="alert alert-error">' + err + '</div>').then(function () {
return;
});
}).complete(function (r) {
console.log(r.responseText);
});
When the session has expired, in my main controller I redirect to login page.
JFactory::getApplication()->redirect(JURI::base() . 'index.php?option=com_users&view=login', $error, 'error'); //redirect to login page
This means that the hole html is returned in the Ajax response and when I popup the response I get an [object object]
instead of a human readable error.
I guess I need to find a way to check if the session has expired when click
event fires and alert an error, before I make the Ajax call.
Is it possible to check the JSESSION in javascript or any other way to solve it ?
joomla-3.x javascript ajax jsession
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
I am developing a component and I use ajax calls to do some tasks in the frontend.
I have come to a problem when the session is expires and I don't want to use keepalive to solve it.
In the frontend I have a list view. And there there are some buttons that perform tasks using ajax requests.
For example :
$('#resetData').on('click', function (e) {
e.preventDefault();
var token = jQuery("#token").attr("name");
var itemId = $(this).attr('data-id');
$.ajax({
method: 'POST',
cache: false,
dataType: "json",
data: { [token]: "1", id: itemId},
url: 'index.php?option=com_contract&task=contract.resetData'
}).success(function (r) {
console.log('Response :');
console.log(r);
if (r.responseText) {
UIkit.modal.alert(r.responseText).then(function () {
window.location.reload();
});
}
if (r.message) {
UIkit.modal.alert(r.message).then(function () {
window.location.reload();
});
}
}).error(function (err) {
console.log(err);
UIkit.modal.alert('<div class="alert alert-error">' + err + '</div>').then(function () {
return;
});
}).complete(function (r) {
console.log(r.responseText);
});
When the session has expired, in my main controller I redirect to login page.
JFactory::getApplication()->redirect(JURI::base() . 'index.php?option=com_users&view=login', $error, 'error'); //redirect to login page
This means that the hole html is returned in the Ajax response and when I popup the response I get an [object object]
instead of a human readable error.
I guess I need to find a way to check if the session has expired when click
event fires and alert an error, before I make the Ajax call.
Is it possible to check the JSESSION in javascript or any other way to solve it ?
joomla-3.x javascript ajax jsession
I am developing a component and I use ajax calls to do some tasks in the frontend.
I have come to a problem when the session is expires and I don't want to use keepalive to solve it.
In the frontend I have a list view. And there there are some buttons that perform tasks using ajax requests.
For example :
$('#resetData').on('click', function (e) {
e.preventDefault();
var token = jQuery("#token").attr("name");
var itemId = $(this).attr('data-id');
$.ajax({
method: 'POST',
cache: false,
dataType: "json",
data: { [token]: "1", id: itemId},
url: 'index.php?option=com_contract&task=contract.resetData'
}).success(function (r) {
console.log('Response :');
console.log(r);
if (r.responseText) {
UIkit.modal.alert(r.responseText).then(function () {
window.location.reload();
});
}
if (r.message) {
UIkit.modal.alert(r.message).then(function () {
window.location.reload();
});
}
}).error(function (err) {
console.log(err);
UIkit.modal.alert('<div class="alert alert-error">' + err + '</div>').then(function () {
return;
});
}).complete(function (r) {
console.log(r.responseText);
});
When the session has expired, in my main controller I redirect to login page.
JFactory::getApplication()->redirect(JURI::base() . 'index.php?option=com_users&view=login', $error, 'error'); //redirect to login page
This means that the hole html is returned in the Ajax response and when I popup the response I get an [object object]
instead of a human readable error.
I guess I need to find a way to check if the session has expired when click
event fires and alert an error, before I make the Ajax call.
Is it possible to check the JSESSION in javascript or any other way to solve it ?
joomla-3.x javascript ajax jsession
joomla-3.x javascript ajax jsession
asked yesterday
mixahlos
1298
1298
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
3
down vote
One way I can imagine to check the session is before you ignite the above ajax call, you make a previous ajax call to another function in com_contract/controller(task = your new session checking function. so: url:...com_contract/task=checkSession) where you create a function, something like:
public function checkSession()
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
I just created this function here fast, so mistakes might be in it and also can be improved with anything more but this is how I would start to check the session via ajax.
The other implication would be according to me, that if a session is expired then the token might be invalid during this call. I did not try that, so it has to be tested, whether the ajax call can be sent with the token (from an expired session. it does not sound too logical).
Exactly because of this reason (expired tokens) I suggested earlier to keep the session alive, instead of other solutions on sessions.
FEW ADDITIONAL THOUGHTS ON THIS SUBJECT (since this subject will come up many times here)
If you try to make an ajax call with an expired session token, then you will always get an 'invalid token' response, thus the ajax call will fail anyway, so it is better to do a redirect in javascript if the response is 'invalid token' because of expired session or because of the invalid response (simply a failed ajax call). Then the check session function could be extended with few lines, as an example, but probably it does not have valid purpose in this case:
public function checkSession()
{
if (! JSession::checkToken())
{
echo new JResponseJson('invalid token');
// jexit( 'Invalid Token' );
}
else
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
}
This I wanted to add to this subject. But without this relatively redundant function, simply any invalid token response should ignite redirect in the javascript, so checking session state is not really needed here. At least I at the moment do not see the reason for that.
Thank you for your time @Zollie. I tested your function and it works with a small addition. After theecho new JResponseJson
must calldie()
orJFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.
– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
add a comment |
up vote
2
down vote
To get the session state, you can use the following:
JFactory::getSession()->getState();
I'm not sure if this script is inline or a separate file. If it's inline then you can simply add the following to your Javascript:
var sessionState = '<?php echo JFactory::getSession()->getState(); ?>';
if (sessionState === 'expired') {
// redirect to login page
}
On a side note, the use of .success()
and .error()
are deprecated in jQuery. Please use .done()
and .fail()
. Also, just so you know, .then()
will not work in IE11.
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
One way I can imagine to check the session is before you ignite the above ajax call, you make a previous ajax call to another function in com_contract/controller(task = your new session checking function. so: url:...com_contract/task=checkSession) where you create a function, something like:
public function checkSession()
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
I just created this function here fast, so mistakes might be in it and also can be improved with anything more but this is how I would start to check the session via ajax.
The other implication would be according to me, that if a session is expired then the token might be invalid during this call. I did not try that, so it has to be tested, whether the ajax call can be sent with the token (from an expired session. it does not sound too logical).
Exactly because of this reason (expired tokens) I suggested earlier to keep the session alive, instead of other solutions on sessions.
FEW ADDITIONAL THOUGHTS ON THIS SUBJECT (since this subject will come up many times here)
If you try to make an ajax call with an expired session token, then you will always get an 'invalid token' response, thus the ajax call will fail anyway, so it is better to do a redirect in javascript if the response is 'invalid token' because of expired session or because of the invalid response (simply a failed ajax call). Then the check session function could be extended with few lines, as an example, but probably it does not have valid purpose in this case:
public function checkSession()
{
if (! JSession::checkToken())
{
echo new JResponseJson('invalid token');
// jexit( 'Invalid Token' );
}
else
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
}
This I wanted to add to this subject. But without this relatively redundant function, simply any invalid token response should ignite redirect in the javascript, so checking session state is not really needed here. At least I at the moment do not see the reason for that.
Thank you for your time @Zollie. I tested your function and it works with a small addition. After theecho new JResponseJson
must calldie()
orJFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.
– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
add a comment |
up vote
3
down vote
One way I can imagine to check the session is before you ignite the above ajax call, you make a previous ajax call to another function in com_contract/controller(task = your new session checking function. so: url:...com_contract/task=checkSession) where you create a function, something like:
public function checkSession()
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
I just created this function here fast, so mistakes might be in it and also can be improved with anything more but this is how I would start to check the session via ajax.
The other implication would be according to me, that if a session is expired then the token might be invalid during this call. I did not try that, so it has to be tested, whether the ajax call can be sent with the token (from an expired session. it does not sound too logical).
Exactly because of this reason (expired tokens) I suggested earlier to keep the session alive, instead of other solutions on sessions.
FEW ADDITIONAL THOUGHTS ON THIS SUBJECT (since this subject will come up many times here)
If you try to make an ajax call with an expired session token, then you will always get an 'invalid token' response, thus the ajax call will fail anyway, so it is better to do a redirect in javascript if the response is 'invalid token' because of expired session or because of the invalid response (simply a failed ajax call). Then the check session function could be extended with few lines, as an example, but probably it does not have valid purpose in this case:
public function checkSession()
{
if (! JSession::checkToken())
{
echo new JResponseJson('invalid token');
// jexit( 'Invalid Token' );
}
else
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
}
This I wanted to add to this subject. But without this relatively redundant function, simply any invalid token response should ignite redirect in the javascript, so checking session state is not really needed here. At least I at the moment do not see the reason for that.
Thank you for your time @Zollie. I tested your function and it works with a small addition. After theecho new JResponseJson
must calldie()
orJFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.
– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
add a comment |
up vote
3
down vote
up vote
3
down vote
One way I can imagine to check the session is before you ignite the above ajax call, you make a previous ajax call to another function in com_contract/controller(task = your new session checking function. so: url:...com_contract/task=checkSession) where you create a function, something like:
public function checkSession()
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
I just created this function here fast, so mistakes might be in it and also can be improved with anything more but this is how I would start to check the session via ajax.
The other implication would be according to me, that if a session is expired then the token might be invalid during this call. I did not try that, so it has to be tested, whether the ajax call can be sent with the token (from an expired session. it does not sound too logical).
Exactly because of this reason (expired tokens) I suggested earlier to keep the session alive, instead of other solutions on sessions.
FEW ADDITIONAL THOUGHTS ON THIS SUBJECT (since this subject will come up many times here)
If you try to make an ajax call with an expired session token, then you will always get an 'invalid token' response, thus the ajax call will fail anyway, so it is better to do a redirect in javascript if the response is 'invalid token' because of expired session or because of the invalid response (simply a failed ajax call). Then the check session function could be extended with few lines, as an example, but probably it does not have valid purpose in this case:
public function checkSession()
{
if (! JSession::checkToken())
{
echo new JResponseJson('invalid token');
// jexit( 'Invalid Token' );
}
else
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
}
This I wanted to add to this subject. But without this relatively redundant function, simply any invalid token response should ignite redirect in the javascript, so checking session state is not really needed here. At least I at the moment do not see the reason for that.
One way I can imagine to check the session is before you ignite the above ajax call, you make a previous ajax call to another function in com_contract/controller(task = your new session checking function. so: url:...com_contract/task=checkSession) where you create a function, something like:
public function checkSession()
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
I just created this function here fast, so mistakes might be in it and also can be improved with anything more but this is how I would start to check the session via ajax.
The other implication would be according to me, that if a session is expired then the token might be invalid during this call. I did not try that, so it has to be tested, whether the ajax call can be sent with the token (from an expired session. it does not sound too logical).
Exactly because of this reason (expired tokens) I suggested earlier to keep the session alive, instead of other solutions on sessions.
FEW ADDITIONAL THOUGHTS ON THIS SUBJECT (since this subject will come up many times here)
If you try to make an ajax call with an expired session token, then you will always get an 'invalid token' response, thus the ajax call will fail anyway, so it is better to do a redirect in javascript if the response is 'invalid token' because of expired session or because of the invalid response (simply a failed ajax call). Then the check session function could be extended with few lines, as an example, but probably it does not have valid purpose in this case:
public function checkSession()
{
if (! JSession::checkToken())
{
echo new JResponseJson('invalid token');
// jexit( 'Invalid Token' );
}
else
{
try
{
$session1 = JFactory::getSession();
$isActive = $session1->isActive();
$sessionState = $session1->getState();
echo new JResponseJson($isActive, $sessionState);
}
catch(Exception $e)
{
echo new JResponseJson($e);
}
}
}
This I wanted to add to this subject. But without this relatively redundant function, simply any invalid token response should ignite redirect in the javascript, so checking session state is not really needed here. At least I at the moment do not see the reason for that.
edited 19 hours ago
answered yesterday
Zollie
3819
3819
Thank you for your time @Zollie. I tested your function and it works with a small addition. After theecho new JResponseJson
must calldie()
orJFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.
– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
add a comment |
Thank you for your time @Zollie. I tested your function and it works with a small addition. After theecho new JResponseJson
must calldie()
orJFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.
– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
Thank you for your time @Zollie. I tested your function and it works with a small addition. After the
echo new JResponseJson
must call die()
or JFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.– mixahlos
16 hours ago
Thank you for your time @Zollie. I tested your function and it works with a small addition. After the
echo new JResponseJson
must call die()
or JFactory::getApplication()->close();
because it will return html instead of the JSON response. As you already said, only the first if is enough, if the session has expired then since the function is not called at all. I will post a new answer with the complete working code and comments for future searches if is ok with you.– mixahlos
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
I'm happy that it helped you in solving the problem. I also used jexit() after the invalid token jsonresponse (I just put it as a comment in the code), so I agree with you on this too, it should be closed this way or that way with a required response. :)
– Zollie
16 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
After a lot of testing it is not working properly. This is because of the asynchronous nature of ajax. When making the ajax call to check the session, the rest of the code is still running. So the next ajax call is also being called and returns before the checkSession. This is happening in most of the times, this results the error message from the next ajax call (the original one) to be displayed before the alert or (reload in my case) if the session has expired, so this takes us back to the original problem.
– mixahlos
9 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
I see your point and I do not want to start a long session here in comments :) , but you should restructure your javascript/jQuery script because of the nature of javascript. There are at least 3 different solutions on that problem in javascript. The second function should only be ignited if we get the first function' response.
– Zollie
5 hours ago
add a comment |
up vote
2
down vote
To get the session state, you can use the following:
JFactory::getSession()->getState();
I'm not sure if this script is inline or a separate file. If it's inline then you can simply add the following to your Javascript:
var sessionState = '<?php echo JFactory::getSession()->getState(); ?>';
if (sessionState === 'expired') {
// redirect to login page
}
On a side note, the use of .success()
and .error()
are deprecated in jQuery. Please use .done()
and .fail()
. Also, just so you know, .then()
will not work in IE11.
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
add a comment |
up vote
2
down vote
To get the session state, you can use the following:
JFactory::getSession()->getState();
I'm not sure if this script is inline or a separate file. If it's inline then you can simply add the following to your Javascript:
var sessionState = '<?php echo JFactory::getSession()->getState(); ?>';
if (sessionState === 'expired') {
// redirect to login page
}
On a side note, the use of .success()
and .error()
are deprecated in jQuery. Please use .done()
and .fail()
. Also, just so you know, .then()
will not work in IE11.
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
add a comment |
up vote
2
down vote
up vote
2
down vote
To get the session state, you can use the following:
JFactory::getSession()->getState();
I'm not sure if this script is inline or a separate file. If it's inline then you can simply add the following to your Javascript:
var sessionState = '<?php echo JFactory::getSession()->getState(); ?>';
if (sessionState === 'expired') {
// redirect to login page
}
On a side note, the use of .success()
and .error()
are deprecated in jQuery. Please use .done()
and .fail()
. Also, just so you know, .then()
will not work in IE11.
To get the session state, you can use the following:
JFactory::getSession()->getState();
I'm not sure if this script is inline or a separate file. If it's inline then you can simply add the following to your Javascript:
var sessionState = '<?php echo JFactory::getSession()->getState(); ?>';
if (sessionState === 'expired') {
// redirect to login page
}
On a side note, the use of .success()
and .error()
are deprecated in jQuery. Please use .done()
and .fail()
. Also, just so you know, .then()
will not work in IE11.
answered yesterday
Lodder♦
23.1k32771
23.1k32771
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
add a comment |
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
This looks like a more workable solution to this question, simpler and better than what I wrote few minutes after this... :) upvoted
– Zollie
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
Actually this isnt a good solution as it doesnt check when the button is clicked. It checks on page load. Your anawer does the trick properly so I'll delete this
– Lodder♦
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
From this approach you are right. But I don't know why, I just liked the simple approach of your answer. I would leave that here any way, it's still very good for reference in other session checking cases for later researchers.
– Zollie
yesterday
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
It would be great if it was working. Really clean simple with just a few lines of code. Unfortunately as already said is not working in the click listener. Thank you
– mixahlos
16 hours ago
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fjoomla.stackexchange.com%2fquestions%2f23792%2fhow-to-check-jsession-in-javascript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown