Home » Php » How can I set a session var using javascript and get it via php code

How can I set a session var using javascript and get it via php code

Posted by: admin July 12, 2020 Leave a comment

Questions:

I have a javascript code like this :

<script type="text/javascript">

    $('#editRole').on('show.bs.modal', function (e) {  

        $roleID =  $(e.relatedTarget).attr('data-id');
        // Here I want to set this $roleID in session may be like this :
        Session['roleID'] = $roleID;                      
    });    

</script>

Then I want to get that $roleID in an other place using php code, may be like this :

<?php $roleID = Session::get('roleID'); //do something ....  ?>

Thanks

How to&Answers:

You can’t set a server session variable directly from JS.

To do that you can make an AJAX call to a PHP script passing the value you want to set, and set it server side:

$('#editRole').on('show.bs.modal', function (e) {  

    $roleID =  $(e.relatedTarget).attr('data-id');

    //ajax call 
    $.ajax({
         url: "set_session.php",
         data: { role: $roleID }
    });                             
}); 

set_session.php

//preliminary code

Session::put('roleID', $request->input('role') );                      

Answer:

Above answer and from other resources together helped me out to make example similar to situation like ‘Setting the session using AJAX in laravel‘.

Im posting simple example, which other users might found this helpful.

View – ajax_session.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $('#submit').on('click',function(){
                // show that something is loading
                $('#response').html("<b>Loading response...</b>");
                $.ajax({
                    type: 'POST',
                    url: '/set_session',
                    data: $("#userform").serialize()
                })
                .done(function(data){
                    // show the response
                     $('#response').html(data);
                })
                .fail(function() {
                    // just in case posting your form failed
                    alert( "Posting failed." );
                });
                // to prevent refreshing the whole page page
                return false;
            });
        });
    </script>
</head>
<body>
    <form id="userform">
        {{ csrf_field() }} <!--required - otherwise post will fail-->
        <input type="text" id="uname" name="uname" required/>
        <button type='submit' id="submit">Submit</button>
        <div id='response'></div>
    </form>
</body>
</html>

routes.php

Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', '[email protected]');
Route::get('allsession', '[email protected]');

Controller – sessionController.php

public function createsession(Request $request)
{
    \Session::put('uname', $request->uname);
    echo "session created";
}
public function getsession()
{
    dd(\Session::get('uname'));
}

You can check this by running localhost:8000/session_form. And you can also check session separately by localhost:8000/allsession.

Hope this helps!!!