简体   繁体   English

如何使用javascript设置会话var并通过php代码获取它

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

I have a javascript code like this : 我有一个像这样的JavaScript代码:

<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,可能是这样的:

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

Thanks 谢谢

You can't set a server session variable directly from JS. 您无法直接从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: 为此,您可以对PHP脚本进行AJAX调用,传递您要设置的值,并将其设置为服务器端:

$('#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 set_session.php

//preliminary code

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

Above answer and from other resources together helped me out to make example similar to situation like ' Setting the session using AJAX in laravel '. 上面的答案和其他资源一起帮助我做出类似“ 在laravel中使用AJAX设置会话 ”的情况。

Im posting simple example, which other users might found this helpful. 我发布简单的例子,其他用户可能会发现这有用。

View - ajax_session.blade.php 查看 - 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 routes.php文件

Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', 'SessionController@createsession');
Route::get('allsession', 'SessionController@getsession');

Controller - sessionController.php 控制器 - 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 . 您可以通过运行localhost:8000/session_form来检查这一点。 And you can also check session separately by localhost:8000/allsession . 您还可以通过localhost:8000/allsession单独检查会话。

Hope this helps!!! 希望这可以帮助!!!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM