আমি কীভাবে ওয়েবমেডোডে সেশন অ্যাক্সেস করতে পারি?


87

আমি একটি এর মধ্যে সেশন মান ব্যবহার করতে পারেন WebMethod?

আমি চেষ্টা করে দেখেছি System.Web.Services.WebMethod(EnableSession = true)তবে আমি উদাহরণের মতো সেশন প্যারামিটারটি অ্যাক্সেস করতে পারি না :

    [System.Web.Services.WebMethod(EnableSession = true)]
    [System.Web.Script.Services.ScriptMethod()]
    public static String checaItem(String id)
    { 
        return "zeta";
    }

এখানে জেএস যিনি ওয়েবমোথোডকে কল করেছেন:

    $.ajax({
        type: "POST",
        url: 'Catalogo.aspx/checaItem',
        data: "{ id : 'teste' }",
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert(data);
        }
    });

4
একটি কোড উদাহরণ পোস্ট করা আপনাকে একটি উত্তর সরবরাহ করতে সহায়তা করবে।
ভোলপ্যাভ

আপনি কি ব্যতিক্রম পাচ্ছেন?
দারিন দিমিত্রভ

4
উপরের উদাহরণে আমি আপনাকে কোনও সেশনের মান অ্যাক্সেস করার চেষ্টা করতে দেখছি না। আপনাকে প্রথমে সেশনটি সেট করতে হবে তারপরে আপনার পোস্ট করা লিঙ্কের মতো এটি অ্যাক্সেস করতে হবে। রিটার্ন (অন্তর্গত) অধিবেশন ["রূপান্তর"];
ক্যাপড্রাগন

@ ভোলপাভ তিনি উদাহরণ কোড সরবরাহ করেছেন।
BrainSlugs83

না, @ ক্যাপড্রাগন স্থির পদ্ধতিগুলির জন্য পৃষ্ঠাগুলির সেশন সম্পত্তি বিদ্যমান নেই (ওয়েবমেথডগুলি স্থির হওয়া প্রয়োজন) - নীচে পোস্ট করা হিসাবে, সম্পত্তিটি কোথায় পাওয়া যায় সে সম্পর্কে তিনি জিজ্ঞাসা করছেন, এটি বর্তমান এইচটিটিপি কনটেক্সটটিতে বাস করে।
BrainSlugs83

উত্তর:


119

তুমি ব্যবহার করতে পার:

HttpContext.Current.Session

nullআপনি এটি নির্দিষ্ট না করলেও এটি হবে EnableSession=true:

[System.Web.Services.WebMethod(EnableSession = true)]
public static String checaItem(String id)
{ 
    return "zeta";
}

18
হাস্যকরভাবে, আমি এটি ইতিমধ্যে করছিলাম - কেবল এটি আমার পক্ষে কাজ করে নি। এইচটিটিপি কনটেক্সট.কন্টার.সেশন.সেসেন্ট। অ্যাকাউন্ট 0 প্রদান করে (অর্থাত্ সেশনে কোনও আইটেম নেই) আমার জন্য, প্রশ্নের উত্তর ছিল, [ওয়েবমেথড] কে [ওয়েবমেথোডে (সক্ষমযোগ্য সেশন = সত্য)] পরিবর্তন করা। পাছা!
BrainSlugs83

4
ওয়েবকনফিগ <সেশনস্টেট মোড = "ইনপ্রোক" />
কনফিগার করতে ভুলবেন না

10

ওয়েব পদ্ধতির জন্য সেশন সক্ষম করার দুটি উপায় রয়েছে:

1. [WebMethod(enableSession:true)]

2. [WebMethod(EnableSession = true)]

কনস্ট্রাক্টর আর্গুমেন্ট সহ প্রথমটি enableSession:trueআমার পক্ষে কাজ করে না। EnableSessionসম্পত্তি সঙ্গে দ্বিতীয় এক ।


প্রথমটি যদি সংকলন করে তবে আমি বুঝতে পারি না - আমি বিশ্বাস করি এটি এটি করেন না। দ্বিতীয়টি কাজ করে কারণ আপনি সম্পত্তিটি সেট করছেন (কেবলমাত্র এক্সডিটি এখানে প্রকাশিত হচ্ছে)।
এমভিসিডিএস

@ এমভিসিডিএস আপনি কেন মনে করেন যে এটি সংকলন করা উচিত নয়? আপনি WebMethodAttribute(Boolean)ডক্সে পাবলিক কনস্ট্রাক্টর খুঁজে পেতে পারেন ।
ওয়ার্লক

আপনি একদম ঠিক বলছেন. আপনি যদি প্যারামিটারের নামটি সেট না করেন তবে এটি কি অন্যরকম আচরণ করে? কারণ যদি এটি হয় তবে তারা খুব অদ্ভুত কিছু ঘটেছিল যখন তারা কনস্ট্রাক্টরদের (বৈশিষ্ট্যের জন্য) কোডিং করছিলেন।
এমভিসিডিএস

1

সেশন সক্ষম করার জন্য আমাদের [ওয়েবমেথড (সক্ষমসেশন: সত্য)] ব্যবহার করতে হবে

[WebMethod(EnableSession=true)]
public string saveName(string name)
{
    List<string> li;
    if (Session["Name"] == null)
    {
        Session["Name"] = name;
        return "Data saved successfully.";

    }

    else
    {
        Session["Name"] = Session["Name"] + "," + name;
        return "Data saved successfully.";
    }


}

এখন সেশন ব্যবহার করে এই নামগুলি পুনরুদ্ধার করতে আমরা এরকম যেতে পারি

[WebMethod(EnableSession = true)]
    public List<string> Display()
    {
        List<string> li1 = new List<string>();
        if (Session["Name"] == null)
        {

            li1.Add("No record to display");
            return li1;
        }

        else
        {
            string[] names = Session["Name"].ToString().Split(',');
            foreach(string s in names)
            {
                li1.Add(s);
            }

            return li1;
        }

    }

সুতরাং এটি সেশন এবং শো থেকে সমস্ত নাম পুনরুদ্ধার করবে।


0

আপনি এটির মতো চেষ্টা করতে পারেন [ওয়েবমেথড] পাবলিক স্ট্যাটিক অকার্যকর মাইমেথোদ (স্ট্রিং প্রোডাক্টআইডি, স্ট্রিং প্রাইস, স্ট্রিং পরিমাণ, স্ট্রিং মোট) // এখানে নতুন প্যারামিটার যুক্ত করুন {db_class সংযুক্তকরণ = নতুন ডিবি_ক্লাস (); চেষ্টা করুন

            DataTable dt = (DataTable)HttpContext.Current.Session["aaa"];

            if (dt == null)
            {
                DataTable dtable = new DataTable();

                dtable.Clear();
                dtable.Columns.Add("ProductID");// Add new parameter Here
                dtable.Columns.Add("Price");
                dtable.Columns.Add("Quantity");
                dtable.Columns.Add("Total");
                object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here
                dtable.Rows.Add(trow);
                HttpContext.Current.Session["aaa"] = dtable;                   
            }
            else
            {
                object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here
                dt.Rows.Add(trow);
                HttpContext.Current.Session["aaa"] = dt;
            }


        }
        catch (Exception)
        {
            throw;
        }
    }


0

সি # তে, ওয়েব পদ্ধতি ব্যবহার করে পৃষ্ঠার পিছনে কোডে,

[WebMethod(EnableSession = true)]
        public static int checkActiveSession()
        {
            if (HttpContext.Current.Session["USERID"] == null)
            {
                return 0;
            }
            else
            {
                return 1;
            }
        }

এবং, এসপেক্স পৃষ্ঠায়,

$.ajax({
                type: "post",
                url: "",  // url here
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: '{ }',
                crossDomain: true,
                async: false,
                success: function (data) {
                    returnValue = data.d;
                    if (returnValue == 1) {

                    }
                    else {
                        alert("Your session has expired");
                        window.location = "../Default.aspx";
                    }
                },
                error: function (request, status, error) {
                    returnValue = 0;
                }
            });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.