I've added a constructor in a class to check if some user is logged in.
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('encryption');
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
redirect('account/login');
}
}
Here's the ajax
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart"); ?>',
dataType: 'text',
data:{'id':val},
success:function(data) {
if (data != 'added') {
alert('Opps! something went wrong, please try again');
}
}
});
but if I try to call this request without session, it's not redirecting to login page but giving the whole login page code which I can see in network tab
As I know, Ajax simply return a response text. It will not proccess the request
You can try something like following
AJAX
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart"); ?>',
dataType: 'text',
data:{'id':val, 'type':'ajax'}, //say this request coming from a ajax
success:function(data) {
if (data != 'added') {
if(data == "not_log_in"){ //checking whether login or not
window.location = "login_page";
}else{
alert('Opps! something went wrong, please try again');
}
}
}
});
Controller
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
if(isset($_POST["type"])){ // checking whether request coming from ajax or not
echo "not_log_in"; // if it is ajax, simply show an error massage
}else{
redirect('account/login'); //otherwise redirect
}
}
Add return
to your redirect:
return redirect('account/login');
I think the problem arises due to ajax
request not being completed. When the redirection happens it continues to treat it as ajax
request, hence it shows the new page in the network tab.
To solve this you'll have to redirect it to any other function and send a response from it but as you are checking the session in constructor
, we'll have to check a condition for that particular function(method)
.
AJAX
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart/some_new_function"); ?>', // make a new function {some_new_function}
dataType: 'json', // expects json to be returned
data:{'id':val},
success:function(data) {
if (data == 1) { // fail
window.location.href = "<?php echo base_url('account/login'); ?>"; // your-location-&-logic
}else{
// whatever-you-want-to-do
}
}
});
Controller
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('encryption');
$method = $this->router->fetch_method(); // get method name
if($method !== 'some_new_function'){
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
redirect('account/login');
}
}
}
function some_new_function(){ // control will come here from ajax after construct
//perform session check here
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
echo 0; // fail
}else{
echo 1; // success // perform-your-task-here
}
}
Hope this helps you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.