Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript设置会话变量并通过php代码获取_Javascript_Php_Laravel_Session_Laravel 5 - Fatal编程技术网

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

如何使用javascript设置会话变量并通过php代码获取,javascript,php,laravel,session,laravel-5,Javascript,Php,Laravel,Session,Laravel 5,我有如下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 :

我有如下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>
<?php $roleID = Session::get('roleID'); //do something ....  ?>

$('#editRole').on('show.bs.modal',函数(e){
$roleID=$(e.relatedTarget).attr('data-id');
//在这里,我想设置会话中的$roleID可能如下所示:
会话['roleID']=$roleID;
});    
然后我想在另一个地方使用php代码获取$roleID,可能是这样的:

<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>
<?php $roleID = Session::get('roleID'); //do something ....  ?>


谢谢

您不能直接从JS设置服务器会话变量

要做到这一点,您可以对传递要设置的值的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

//preliminary code

Session::put('roleID', $request->input('role') );                      
<!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>
Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', 'SessionController@createsession');
Route::get('allsession', 'SessionController@getsession');
public function createsession(Request $request)
{
    \Session::put('uname', $request->uname);
    echo "session created";
}
public function getsession()
{
    dd(\Session::get('uname'));
}

上述答案和其他资源一起帮助我制作了类似于“在laravel中使用AJAX设置会话”的示例

我发布了一个简单的例子,其他用户可能会觉得这很有帮助

View-ajax\u session.blade.php

//preliminary code

Session::put('roleID', $request->input('role') );                      
<!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>
Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', 'SessionController@createsession');
Route::get('allsession', 'SessionController@getsession');
public function createsession(Request $request)
{
    \Session::put('uname', $request->uname);
    echo "session created";
}
public function getsession()
{
    dd(\Session::get('uname'));
}
Controller-sessionController.php

//preliminary code

Session::put('roleID', $request->input('role') );                      
<!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>
Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', 'SessionController@createsession');
Route::get('allsession', 'SessionController@getsession');
public function createsession(Request $request)
{
    \Session::put('uname', $request->uname);
    echo "session created";
}
public function getsession()
{
    dd(\Session::get('uname'));
}
您可以通过运行
localhost:8000/session\u form
来检查这一点。您还可以通过
localhost:8000/allsession
单独检查会话


希望这有帮助

您不应该也不能从客户端设置PHP会话变量。您必须向服务器发送一些内容,以便服务器进行设置,但您需要小心,以免暴露整个超全局。仅设置会话变量需要ajax调用?是否可以使用laravel直接在javascript代码中设置会话?