सत्र चर को कैसे एक्सेस करें और उन्हें जावास्क्रिप्ट में सेट करें?


83

कोड-पीछे में मैं Sessionकुछ डेटा के साथ सेट करता हूं ।

Session["usedData"] = "sample data";

और सवाल यह है कि मैं जावास्क्रिप्ट में सत्र मान (मेरे उदाहरण में? "नमूना डेटा") कैसे प्राप्त कर सकता हूं और Session["usedData"]एक नए मूल्य के साथ सेट कर सकता हूं ?


3
कृपया बताएं कि यह ASP.Net MVC है या वेबफॉर्म। यदि MVC, आप इसे सीधे जावास्क्रिप्ट तक पहुँचा सकते हैं। यदि वेबफ़ॉर्म, तो आप अस्थायी रूप से ViewState []
Fendy

मैं WebForms का उपयोग कर रहा हूँ, क्यों मैं सत्र चर का उपयोग नहीं कर सकता और इसे एक मूल्य निर्धारित कर सकता हूं?
मेहमत इंस

1
WebForms के माध्यम से भी नहीं, यह WebForm में सत्र तक सीधी पहुँच के लिए मेरे लिए नया है (हालाँकि यह सबसे अधिक संभावना वाला अभ्यास है)। सत्र सर्वर साइड (वेबसर्वर / आईआईएस) में है, और जावास्क्रिप्ट क्लाइंट साइड (ब्राउज़र) पर है। सत्र में परिवर्तन को ट्रिगर करने के लिए आपको वेबसर्वर के लिए विशिष्ट अनुरोध की आवश्यकता है। संक्षेप में, आप ajax (सरल कार्यान्वयन के लिए jQuery) और webservice का उपयोग करके जावास्क्रिप्ट से सत्र को अपडेट कर सकते हैं।
फेंडी

जवाबों:


60

जावास्क्रिप्ट का उपयोग करते हुए सत्र चर को एक्सेस करना और असाइन करना:

जावास्क्रिप्ट का उपयोग करके ASP.NET सत्र चर को निर्दिष्ट करना:

 <script type="text/javascript">
function SetUserName()
{
    var userName = "Shekhar Shete";
    '<%Session["UserName"] = "' + userName + '"; %>';
     alert('<%=Session["UserName"] %>');
}
</script>

जावास्क्रिप्ट का उपयोग करके ASP.NET सत्र चर पर पहुँचना:

<script type="text/javascript">
    function GetUserName()
    {

        var username = '<%= Session["UserName"] %>';
        alert(username );
    }
</script>

6
मैंने आपको सही तरीके से कोड करने की कोशिश की और मेरे आउटपुट में पहुंचने पर मुझे जो आउटपुट मिलता है, वह है+ userName +
राजशेखर रेड्डी

23
यह जवाब काम करने वाला नहीं है। SetUserName विधि को लागू करना सत्र वस्तु तक पहुंचने के लिए सर्वर पर कॉल करने वाला नहीं है
mcintyre321

3
जवाब काम नहीं कर रहा है फिर भी यह बढ़ रहा है। मुझे लगता है कि उत्तर की समीक्षा करने की आवश्यकता है
हेमांशु भल्ला

1
@HeemanshuBhalla वास्तव में इसका उत्तर मिल रहा है क्योंकि पहुंच वाला हिस्सा एक आकर्षण की तरह काम करता है। यद्यपि असाइन किए गए भाग की जाँच नहीं की गई है।
अहमद मालेकी

4
"पहुँच" भाग कार्य। लेकिन बड़ी चेतावनी: इसे केवल एक बार पेज क्रिएशन में सौंपा जाएगा। जावास्क्रिप्ट को प्रस्तुत करते समय सर्वर मान प्रदान करता है। आप पगैलाड () के साथ आंशिक पोस्टपैक पर जावास्क्रिप्ट को फिर से निष्पादित कर सकते हैं लेकिन यदि आपका पोस्टबैक नया सत्र बदलता है तो जावास्क्रिप्ट के लिए असाइन नहीं किया जाएगा। यह सिर्फ पुराने का पुन: उपयोग करेगा।
दानीदेव

27

आप Sessionसीधे जावास्क्रिप्ट में पहुँच नहीं सकते हैं।

आप एक छिपी हुई फ़ील्ड बना सकते हैं और इसे अपने पृष्ठ पर भेज सकते हैं और फिर ऑब्जेक्ट को पुनः प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं document.getElementById


3
सच नहीं, आपको परीक्षा याद है? जेएस में sessionStorage;)।
mattytommo

Haha - मुझे स्थानीयस्टोरेज प्रश्न मिला - उपयोगकर्ता के पेज पर वापस आने की स्थिति में! ;)
डैरेन

इस दृष्टिकोण में एक जोखिम है क्योंकि उपयोगकर्ता ब्राउज़र डेवलपर टूल के साथ छिपे हुए फ़ील्ड के मूल्य को आसानी से बदल सकता है।
अहमद मालेकी

4
@ अहमदाबाद - यही कारण है कि आप सर्वर पर भी मान्य हैं। ऐसा करने से अप्रत्यक्ष वस्तु संदर्भ हमले को रोका जा सकेगा।
डैरेन

13

जावास्क्रिप्ट सीधे सत्र मान सेट नहीं कर सकता है। जावास्क्रिप्ट से सत्र के मूल्यों की स्थापना के लिए मैं इस प्रकार के रूप में ajax कॉल करता हूं।

ऑनलाइन जाँच करें

ASPx फ़ाइल या html में,

 <script type="text/javascript">
 $(function(){
   //Getting values from session and saving in javascript variable.
   // But this will be executed only at document.ready.
   var firstName = '<%= Session["FirstName"] ?? "" %>';
   var lastName = '<%= Session["LastName"] ?? "" %>';

   $("#FirstName").val(firstName);
   $("#LastName").val(lastName);

   $('Button').click(function(){
     //Posting values to save in session
     $.post(document.URL+'?mode=ajax', 
     {'FirstName':$("#FirstName").val(),
     'LastName':$("#LastName").val()
     } );
   });

 });

सर्वर साइड पर,

protected void Page_Load(object sender, EventArgs e)
 {
      if(Request.QueryString["mode"] != null && Request.QueryString["mode"] == "ajax")
      {
        //Saving the variables in session. Variables are posted by ajax.
        Session["FirstName"] = Request.Form["FirstName"] ?? "";
        Session["LastName"] = Request.Form["LastName"] ?? "";
      }
 }

सत्र मूल्यों के लिए, जैसा कि शेखर और राजीव ने कहा है

var firstName = '<%= Session["FirstName"] ?? "" %>';

उम्मीद है की यह मदद करेगा।


12

इसे इस्तेमाल करे

var sessionValue = '<%=Session["usedData"]%>'

धन्यवाद, यह बहुत अच्छा काम करता है :) लेकिन मैं सत्र मूल्य भी निर्धारित करना चाहता हूं, क्या यह संभव है?
मेहमत इंस

@MehmetInce, सत्र मान सेट करने के लिए आप किसी पोस्ट के माध्यम से सर्वर को मूल्य भेजेंगे या प्राप्त करेंगे और सर्वर अनुरोध को संभाल लेंगे। अजाक्स के माध्यम से इस अनुरोध को करने से कुछ नहीं होता है।
ऐश बर्लाज़ेंको

1
@AshBurlaczenko क्या आप इसके लिए एक नमूना उदाहरण पोस्ट कर सकते हैं। इससे बहुत मदद मिलेगी
राजीव कुमार

1
लेकिन, आप जावास्क्रिप्ट का उपयोग करके सत्र चर के लिए मूल्य कैसे प्रदान करेंगे?
शेखर षेटे

10

यदि आप "क्लाइंट साइड जावास्क्रिप्ट" का अर्थ मानते हैं - तो आप कम से कम सीधे नहीं कर सकते हैं।

सत्र डेटा सर्वर पर संग्रहीत है, इसलिए क्लाइंट साइड कोड सर्वर के साथ संचार किए बिना इसे नहीं देख सकता है।

इसे एक्सेस करने के लिए आपको HTTP अनुरोध करना होगा और सर्वर साइड प्रोग्राम को संशोधित करना होगा और डेटा को पढ़ना / वापस करना होगा।


अगर मैं सीधे प्रवेश नहीं कर सकता, तो मेरा अनुरोध मौका http अनुरोध का उपयोग करने के लिए है :(
Mehmet Ince

4

कोड-पीछे फ़ाइल में एक छिपे हुए क्षेत्र के लिए मान असाइन करें। अपनी जावास्क्रिप्ट में इस मान को एक सामान्य HTML नियंत्रण की तरह एक्सेस करें।


अच्छी बात यह है कि कोड सुरक्षा के लिए आसान पहुंच लेकिन बड़ी समस्या है, उपयोगकर्ता अपने खाते के उपयोगकर्ता को बदल सकता है / क्रोम में devTool जैसे उपकरणों का उपयोग करके एक्सेस कर सकता है और वह कर सकता है जिसे उसके एक्सेस स्तर की अनुमति नहीं है
StudioX

2

आप सेशन साइड सेशन चर सेट नहीं कर सकते Javascript। यदि आप ऐसा करना चाहते हैं, तो आपको सर्वर पर इसे अपडेट करने के लिए एक AJAX POST बनाने की आवश्यकता है , हालांकि यदि कार का चयन एक प्रमुख घटना है, तो यह इस POST के लिए आसान हो सकता है ।


2

पहले सत्र सेट करने के लिए कोड में एक विधि बनाएँ:

 [System.Web.Services.WebMethod]
 public static void SetSession(int id)
 {
     Page objp = new Page();
     objp.Session["IdBalanceSheet"] = id;
 }

फिर इसे क्लाइंट की तरफ से कॉल करें:

function ChangeSession(values) {
     PageMethods.SetSession(values);
     }

आपको EnablePageMethods को सही पर सेट करना चाहिए:

<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>

2

यदि आप जावास्क्रिप्ट में सत्र मान पढ़ना चाहते हैं। यह कोड आपके लिए मदद करता है।

<script type='text/javascript'> var userID='@Session["userID"]'; </script>


1

आप किसी प्रॉपर्टी में वैरिएबल भी सेट कर सकते हैं और इसे js से कॉल कर सकते हैं:

सर्वर की ओर:

Protected ReadOnly Property wasFieldEditedStatus() As Boolean
    Get
        Return If((wasFieldEdited), "true", "false")
    End Get
End Property

और फिर जावास्क्रिप्ट में:

alert("The wasFieldEdited Value: <%= wasFieldEditedStatus %>" );

1

मैं इस समस्या के समाधान की तलाश में था, जब तक कि मुझे सत्र चर तक पहुँचने के लिए एक बहुत ही सरल समाधान नहीं मिला, यह मानते हुए कि आप सर्वर पक्ष पर एक .php फ़ाइल का उपयोग करते हैं। आशा है कि यह सवाल का हिस्सा है:

पहुंच सत्र मान

<script type="text/javascript">        
    var value = <?php echo $_SESSION['key']; ?>;
    console.log(value);
</script>

संपादित करें: नीचे बेहतर उदाहरण, जिसे आप phpfiddle.org पर "कोडस्पेस" टैब पर आज़मा सकते हैं

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <?php
    $_SESSION['key'] = 10;
    $i = $_SESSION['key'];
  ?>
 </head>
 <body>
  <p id="affichage">hello</p>

  <script type="text/javascript">
    var value =  <?php echo $i; ?>;
    $("#affichage").html(value);   
  </script>

 </body>
</html>

सत्र मान सेट करें

जो भी आप चाहते हैं, उसे एक परिवर्तनशील रूप से पारित करें। जैसे,

$you = 13;
$_SESSION['user_id'] = $you;

यह काम करना चाहिए, यह परीक्षण नहीं किया।


आप शायद 'की' को बदलना भूल गए हैं
Matthieu

हैलो @ मैथ्यू पोस्टर पोस्टर के बारे में पूछ रहा है asp.net सत्र php सत्र के लिए नहीं
SHEKHAR SHETE

क्या मुझे अपना पोस्ट हटाना चाहिए?
मैथ्यू

1

यह एक धोखा है, लेकिन आप ऐसा कर सकते हैं, मान को एक पैरामीटर के रूप में गंभीर रूप से भेजें

<script>
var myVar = "hello"
window.location.href = window.location.href.replace(/[\?#].*|$/, "?param=" + myVar); //Send the variable to the server side
</script>

और सर्वर की ओर से, पैरामीटर को पुनः प्राप्त करें

string myVar = Request.QueryString["param"];
Session["SessionName"] = myVar;

उम्मीद है की यह मदद करेगा


1

पृष्ठ निर्माण के बाद सर्वर से सत्र डेटा को संशोधित करने के लिए आपको काम करने के लिए AJAX या यहां तक ​​कि JQuery का उपयोग करना होगा। वे दोनों सत्र डेटा को संशोधित करने और उस कनेक्शन से वापस डेटा प्राप्त करने के लिए सर्वर से कनेक्शन बना सकते हैं।

<?php
session_start();
$_SESSION['usedData'] = "Some Value"; //setting for now since it doesn't exist
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Modifying PHP Session Data</title>
        <script type='text/javascript'>
            var usedData = '<?php echo $_SESSION['usedData']; ?>';
            var oldDataValue = null;

            /* If function used, sends new data from input field to the
               server, then gets response from server if any. */

            function modifySession () {
                var newValue = document.getElementById("newValueData").value;

                /* You could always check the newValue here before making
                   the request so you know if its set or needs filtered. */

                var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

                xhttp.onreadystatechange = function () {
                    if (this.readyState == 4 && this.status == 200) {
                        oldDataValue = usedData;
                        usedData = this.responseText; //response from php script
                        document.getElementById("sessionValue").innerHTML = usedData;
                        document.getElementById("sessionOldValue").innerHTML = oldDataValue;
                    }
                };

            xhttp.open("GET", "modifySession.php?newData="+newValue, true);
            xhttp.send(); 
            }
        </script>
    </head>
    <body>
        <h1><p>Modify Session</p></h1>

        Current Value: <div id='sessionValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>
        Old Value: <div id='sessionOldValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>

        New Value: <input type='text' id='newValueData' /><br/>
        <button onClick='modifySession()'>Change Value</button>
   </body>
</html>

अब हमें सत्र डेटा और यदि आवश्यक हो तो डेटा वापस पोस्ट करने के लिए संशोधित करने के लिए एक छोटी सी php स्क्रिप्ट को संशोधित करना होगा।

<?php
session_start();
$_SESSION['usedData'] = $_GET['newData']; //filter if necessary
echo $_SESSION['usedData']; // Post results back if necessary
?>

यह वांछित परिणाम प्राप्त करना चाहिए जिसे आप PHP / AJAX का उपयोग करके सत्र को सर्वर के माध्यम से संशोधित करके देख रहे हैं।


1

यहाँ मेरे लिए क्या काम किया है। जावास्क्रिप्ट यह है।

<script type="text/javascript">
var deptname = '';
</script>

C # कोड के पीछे यह होता है - इसे मास्टर पेज पर रखा जा सकता है, इसलिए यह कभी भी पेज परिवर्तन पर var रीसेट कर देता है।

        String csname1 = "LoadScript";
        Type cstype = p.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = p.ClientScript;

        // Check to see if the startup script is already registered.
        if (!cs.IsStartupScriptRegistered(cstype, csname1))
        {
            String cstext1 = funct;
            cs.RegisterStartupScript(cstype, csname1, "deptname = 'accounting'", true);
        }
        else
        {
            String cstext = funct;
            cs.RegisterClientScriptBlock(cstype, csname1, "deptname ='accounting'",true);
        }

इस कोड को एक बटन पर क्लिक करें deptname परिवर्तित की पुष्टि करने के लिए क्लिक करें।

alert(deptname);

0

मैं सत्रों में आवश्यक डालने के लिए मेरी .php फ़ाइल का उपयोग करता था

$ _SIONION ['नाम'] = $ phparray ["नाम"]; $ ajaxoutput ['name'] = $ phparray ["name"];

मेरे .js फ़ाइल में मैंने प्रयोग किया है

sessionStorage.setItem ("नाम", ajaxreturnedarray ["नाम"]);

और मैंने इसे प्रयोग करके पुनः प्राप्त किया

var myName = sessionStorage.getItem ("नाम");

अन्य .js फ़ाइलों में या उसी .js फ़ाइलों में

अगर मैं इसे वैसे ही रखता हूँ, तो यह हर समय आपके लॉगआउट होने पर भी वापस आ जाएगा। इसलिए जब मैं बाहर प्रवेश कर रहा हूं

sessionStorage.setItem ("नाम", "");

इसका उपयोग करके मैंने स्थानीय चर को खाली कर दिया। मैंने इस प्रक्रिया का उपयोग सिंगल पेज वेबसाइट लॉगिन / लॉगआउट सत्र में किया। मुझे उम्मीद है कि यह तरीका आपके लिए काम करेगा क्योंकि यह मेरे लिए काम करता है। plz मुझे अपने अनुभव बताइए।


0

मैं साधारण URL पैरामीटर और ऑटो रिफ्रेश के साथ एक समान समस्या को हल करने में सक्षम था।

आप URL पैरामीटर से मान प्राप्त कर सकते हैं, जो कुछ भी आप उनके साथ चाहते हैं वह करें और बस पृष्ठ ताज़ा करें।

HTML:

<a href=\"webpage.aspx?parameterName=parameterValue"> LinkText </a>

सी#:

string variable = Request.QueryString["parameterName"];
if (parameterName!= null)
{
   Session["sessionVariable"] += parameterName;
   Response.AddHeader("REFRESH", "1;URL=webpage.aspx");
}


-1

संभवतः इस दृष्टिकोण के साथ कुछ लाभ। ऐसा लगता है कि सत्र चर के लिए तारीख वापस मिल जाएगी। यह जो स्ट्रिंग देता है वह जावास्क्रिप्ट दिनांक प्रदर्शित करता है लेकिन जब मैं स्ट्रिंग को हेरफेर करने की कोशिश करता हूं तो यह जावास्क्रिप्ट कोड प्रदर्शित करता है।

ob_start();
?>
<script type="text/javascript">
    var d = new Date();
    document.write(d);
</script>
<?
$_SESSION["date"]  = ob_get_contents();
ob_end_clean();
echo $_SESSION["date"]; // displays the date
echo substr($_SESSION["date"],28); 
// displays 'script"> var d = new Date(); document.write(d);'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.