এক্সপ্রেস ফ্রেমওয়ার্ক ব্যবহার করে নোড জেসে কীভাবে কুকি সেট করবেন?


161

আমার অ্যাপ্লিকেশনটিতে, আমাকে এক্সপ্রেস ফ্রেমওয়ার্ক ব্যবহার করে একটি কুকি সেট করতে হবে I আমি নিম্নলিখিত কোডটি চেষ্টা করেছি তবে এটি কুকি সেট করছে না।

আমাকে এই কাজ করতে কেউ সাহায্য করতে পারে?

var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
      app.use(express.cookieParser());
      app.use(express.static(__dirname + '/public'));

      app.use(function (req, res) {
           var randomNumber=Math.random().toString();
           randomNumber=randomNumber.substring(2,randomNumber.length);
           res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })

           console.log('cookie have created successfully');
      });

});

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);

আপনি কীভাবে যাচাই করছেন যে কুকি সেট করা নেই? ব্রাউজারটি যে প্রতিক্রিয়ার শিরোনামগুলি পেয়েছে তা কি আপনি চেক করেছেন?
নিলশ

@NilsH আমি লগ যুক্ত করেছেন statement.if এর মানে এটা প্রদর্শন করবে 'কুকি susccessfully তৈরি করেছেন' সেট ..
সচিন

1
ঠিক আছে, তাহলে হয় আপনার মিডলওয়্যারটি চালিত নয়, বা পূর্ববর্তী কয়েকটি বিবৃতি একটি ব্যতিক্রম দেয়।
নিলশ

যদি আমি 'app.use (এক্সপ্রেস.স্ট্যাটিক (__ dirname +' / সর্বজনীন ')) সরিয়ে ফেলেছি; এই লাইনটির অর্থ এটি কুকি সেট করেছে
sachin

উত্তর:


216

আপনি এক্সপ্রেসের ক্ষেত্রে মিডলওয়্যারটি যে ক্রমে ব্যবহার করেন: পূর্বে ঘোষিত মিডলওয়্যারটি প্রথমে কল হবে এবং যদি এটি কোনও অনুরোধ পরিচালনা করতে পারে তবে পরে ঘোষণা করা কোনও মিডলওয়্যার কল করা হবে না।

যদি express.staticঅনুরোধটি পরিচালনা করা হয় তবে আপনার মিডলওয়্যারটি আপ সরানো দরকার:

// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());

// set a cookie
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.cookieName;
  if (cookie === undefined) {
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
    console.log('cookie created successfully');
  } else {
    // yes, cookie was already present 
    console.log('cookie exists', cookie);
  } 
  next(); // <-- important!
});

// let static middleware do its job
app.use(express.static(__dirname + '/public'));

এছাড়াও, মিডলওয়্যারগুলির প্রয়োজন হয় একটি একটি অনুরোধ (কোনও প্রতিক্রিয়া ফেরত পাঠিয়ে) শেষ করতে হবে, বা অনুরোধটি পরবর্তী মিডওয়্যারের কাছে পাস করতে হবে। এই ক্ষেত্রে, next()কুকি সেট হয়ে যাওয়ার পরে ফোন করে আমি শেষটি করেছি ।

হালনাগাদ

এখনকার মতো কুকি পার্সারটি একটি পৃথক এনএমপি প্যাকেজ, সুতরাং ব্যবহারের পরিবর্তে

app.use(express.cookieParser());

আপনার এটিকে আলাদাভাবে ইনস্টল npm i cookie-parserকরতে হবে এবং তারপরে এটি ব্যবহার করুন:

const cookieParser = require('cookie-parser');
app.use(cookieParser());

এছাড়াও আমার আরও একটি প্রশ্ন রয়েছে যে আমি কুকি সেট করার আগে কোক্কি বিদ্যমান আছে কিনা তা আমি কীভাবে যাচাই করতে পারি
sachin

কুকি ইতিমধ্যে সেট করা আছে কি না তা পরীক্ষা করে দেখানোর জন্য আমি আমার উত্তর সম্পাদনা করেছি।
রবার্টক্লেপ

1
আপনার পৃষ্ঠায় সম্ভবত কিছু জেএস এবং / অথবা সিএসএস ফাইল রয়েছে। এগুলি দ্বারা পরিচালিত হবে express.static, যা আপনার মিডওয়্যারের পরে এগুলি পরিচালনা করবে । সুতরাং প্রতিটি জেএস বা সিএসএস ফাইলের জন্য কোড কল করা হবে।
রবার্টক্লেপ

1
এটি 8 বার কুকি সেট করে না, এটি বলছে যে কুকি ইতিমধ্যে বিদ্যমান। যা আশা করা যায়।
রবার্টক্লেপ

14
নোট করুন যে কুকি পার্সার এখন আলাদাভাবে ইনস্টল করা উচিত। Npmjs.com/package/cookie-parser
জোশুয়া

118

কুকি সেট?

res.cookie('cookieName', 'cookieValue')

কুকি পড়?

req.cookies

ডেমো

const express('express')
    , cookieParser = require('cookie-parser'); // in order to read cookie sent from client

app.get('/', (req,res)=>{

    // read cookies
    console.log(req.cookies) 

    let options = {
        maxAge: 1000 * 60 * 15, // would expire after 15 minutes
        httpOnly: true, // The cookie only accessible by the web server
        signed: true // Indicates if the cookie should be signed
    }

    // Set cookie
    res.cookie('cookieName', 'cookieValue', options) // options is optional
    res.send('')

})

হাই, আপনি কি স্বাক্ষরিত বলতে পারেন: সত্য?
তিতোহহ

আপনি যদি কুকিকে সাইন হিসাবে সেট করার পরামর্শ দিয়ে থাকেন তবে এটি রেকর্ড.কুকি খালি ফিরে আসবে তা লক্ষ করা গুরুত্বপূর্ণ important আপনি শুধুমাত্র req.signedCookies থেকে স্বাক্ষরিত কুকি উদ্ধার করতে পারেন
বিশেষ কারো

38

আপনার প্রশ্নের যথাযথ উত্তর দিচ্ছি না, তবে আমি যে প্রশ্নটি করেছি তার জবাব খুঁজতে গিয়ে আমি আপনার প্রশ্নটি জুড়ে এসেছি। হয়তো এটি অন্য কাউকে সাহায্য করবে।

আমার সমস্যাটি ছিল যে কুকিগুলি সার্ভারের প্রতিক্রিয়াতে সেট করা হয়েছিল তবে ব্রাউজার দ্বারা সেভ করা হয়নি।

সার্ভারের প্রতিক্রিয়া কুকিজ সেট নিয়ে ফিরে এল:

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 

এভাবেই সমাধান করেছি।

আমি fetchক্লায়েন্ট-সাইড কোড ব্যবহার করেছি। আপনি যদি নির্দিষ্ট credentials: 'include' না করেনfetch তবে সার্ভারের প্রতিক্রিয়া কুকিজ সেট করে সত্ত্বেও কুকিগুলি সার্ভারে প্রেরণ করা হয় না এবং ব্রাউজার দ্বারা সেভ হয় না।

উদাহরণ:

var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');

return fetch('/your/server_endpoint', {
    method: 'POST',
    mode: 'same-origin',
    redirect: 'follow',
    credentials: 'include', // Don't forget to specify this if you need cookies
    headers: headers,
    body: JSON.stringify({
        first_name: 'John',
        last_name: 'Doe'
    })
})

আমি এই কারো সাহায্য করে আশা করি।


আমি ব্রাউজারে আমার পোস্টের অনুরোধটি পরিদর্শন করেছি তবে এই ক্ষেত্রটি পোস্টের অনুরোধের সাথে যাচ্ছে না?
সুনীল গার্গ

যদি এক্সএইচআর বা জ্যাকোয়ারি ব্যবহার করে থাকেন তবে 'উইথড্রেডেনটিভালস: ট্রু' ব্যবহার করুন
আনপ্লাগড করা হয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.