AJAX অনুরোধগুলি কি পিএইচপি সেশন তথ্য বজায় রাখবে?


154

যদি আমার কোনও ব্যবহারকারী আমার সাইটে লগইন করে থাকে, তার আইডিটি সঞ্চিত আছে $_SESSIONএবং তার ব্রাউজার থেকে তিনি একটি 'সংরক্ষণ করুন' বোতামটি ক্লিক করেছেন যা সার্ভারে একটি এজেএক্স অনুরোধ করবে। $_SESSIONএই অনুরোধে কি তার এবং কুকিজগুলি বজায় রাখা হবে এবং আমি কীভাবে আইডি-তে উপস্থিত থাকার উপর নিরাপদে নির্ভর করতে পারি $_SESSION?

উত্তর:


191

উত্তরটি হল হ্যাঁ:

সেশনগুলি সার্ভার-সাইড রক্ষণাবেক্ষণ করা হয়। যতক্ষণ না সার্ভারের সাথে সম্পর্কিত, একটি এজেএক্স অনুরোধ এবং নিয়মিত পৃষ্ঠা অনুরোধের মধ্যে কোনও পার্থক্য নেই। এগুলি উভয়ই এইচটিটিপি অনুরোধ, এবং তাদের উভয়ই একইভাবে হেডারে কুকির তথ্য ধারণ করে।

ক্লায়েন্টের পক্ষ থেকে, একই কুকিগুলি সর্বদা সার্ভারে প্রেরণ করা হবে এটি নিয়মিত অনুরোধ বা এজেএক্স অনুরোধ কিনা whether জাভাস্ক্রিপ্ট কোডটি বিশেষ কিছু করার বা এমনকি এই ঘটনার বিষয়ে সচেতন হওয়ার প্রয়োজন নেই, এটি নিয়মিত অনুরোধগুলির সাথে ঠিক একইভাবে কাজ করে।


10
ফলোআপ: HttpOnlyকোনও কুকি সেট করার সময় সার্ভার একটি পতাকা সেট করতে পারে যার অর্থ আপনার জাভাস্ক্রিপ্ট কুকি দেখতে পাবে না। তবে কুকি এখনও এজেএক্স এবং নিয়মিত পৃষ্ঠা অনুরোধ উভয়ের জন্য প্রেরণ করা হবে এবং ঠিক একইরকম কাজ চালিয়ে যেতে হবে। আপনার জাভাস্ক্রিপ্ট ঠিক এটি দেখতে পাবেন না document.cookie
থোমাসরুটটার

যদি পিএইচপি ত্রুটির প্রতিবেদনটি চালু করা থাকে তবে আপনি আজাজ প্রতিক্রিয়া দিয়ে একটি সেশন ত্রুটি ফিরে পেতে পারেন। আমি Warning: session_write_close(): Failed to write session data (user)প্রজেক্টে ইদানীং মাঝেমধ্যে একটি ত্রুটি পেয়েছি , তবে কেবল তখনই যখন বাকী পৃষ্ঠাটি লোড করার সময় এজেএক্স অনুরোধটি ঘটে happens আমি সেশন ডেটার জন্য একটি মাইএসকিউএল ডিবি ব্যবহার করছি এবং এটি সম্ভব যে মূল পৃষ্ঠার অনুরোধটি সেই টেবিলটি লক করছে, অ্যাজেএক্স অনুরোধটিকে অ্যাক্সেস করা থেকে বিরত করছে।
বাটাল বুট্কাস

@ বাটলবাটকাস যা আপনার সার্ভারের সাইড কোডে সমস্যা বলে মনে হচ্ছে এবং আমি নিশ্চিত যে আপনি যদি এটির নিজের প্রশ্ন হিসাবে জমা দেন তবে লোকেরা সহায়তা করতে রাজি হবে। আপনি এই ত্রুটিটি পাচ্ছেন না কারণ আপনি মাইএসকিউএলটি সেশনগুলির জন্য ব্যবহার করছেন কারণ এটি কোনওভাবে লক করা উচিত নয় যা কোনও ত্রুটির সাথে ব্যর্থ হবে। এটি মাইএসকিউএল সংযোগগুলিতে স্যাচুরেটর হওয়া বা অন্য কোনও সম্পর্কহীন সমস্যা হতে পারে।
থোমাসরুটটার

এটি কোনও ভিজাগর মেশিনে ঘটছে যাতে মাইএসকিউএল সংযোগগুলিকে স্যাচুরেট করা উচিত। আমি যদি খুব শীঘ্রই এটি বের করতে না পারি তবে আমি অবশ্যই একটি প্রশ্ন পোস্ট করব।
বাটল বুটকাস

23

যদি পিএইচপি ফাইলটি AJAX অনুরোধে একটি session_start()সেশন তথ্য থাকে তবে তা সংরক্ষণ করা হবে। (অনুরোধগুলি বাদ দেওয়া একই ডোমেনের মধ্যে রয়েছে)


2
প্রকৃতপক্ষে, আমি যা করতে ভুলে গেছি :-)
সিভান

23

আপনি যা সত্যিই পেয়ে যাচ্ছেন তা হ'ল: এজেএক্স অনুরোধের সাথে কুকিজ পাঠানো হয়? ধরে নিই যে এজেএক্স অনুরোধটি একই ডোমেনে (বা কুকির ডোমেন সীমাবদ্ধতার মধ্যে), উত্তরটি হ্যাঁ। সুতরাং এজাক্স একই সার্ভারে ফিরে অনুরোধ করে একই সেশনের তথ্য (কল্পনা করা স্ক্রিপ্টগুলি অধিবেশন তথ্যে অ্যাক্সেস চায় এমন কোনও পিএইচপি স্ক্রিপ্ট অনুসারে একটি সেশন_স্টার্ট () ধরে রাখে) retain


1
আমি ভুল হতে পারি, কিন্তু আমি ভেবেছিলাম অন্য ডোমেনগুলিতে (সাবডোমেনগুলি বাদ দেওয়া) এজ্যাক্স অনুরোধগুলি পোস্ট করাও সম্ভব নয়?
এমিল এইচ

আপনি ডায়নামিক স্ক্রিপ্ট ট্রিক দিয়ে প্রতারণা করতে সক্ষম হতে পারেন। যদিও এটি কখনও ক্লান্ত হয় না।
ক্লিটাস

1
হ্যাঁ, এজ্যাক্স অনুরোধগুলি অন্য ডোমেনগুলিতে করা যাবে না। তবে আপনি পৃষ্ঠায় গতিশীলভাবে একটি <script> ট্যাগ সন্নিবেশ করতে পারেন এবং এর এসসিআরটিকে একটি অফ-ডোমেন url এ সেট করতে পারেন যা জাভাস্ক্রিপ্ট প্রতিধ্বনিত করে।
উপভোটে ক্লিক করুন

1
অন্যান্য ডোমেনগুলিতে এজাক্স অনুরোধ করা যাবে না। তবে আপনি আপনার পিএইচপি কোডে একটি প্রক্সি তৈরি করতে পারেন। প্রক্সিটিতে এজাক্স অনুরোধ, অন্য ডোমেনের প্রক্সি অনুরোধ।
পিটার লং

2
কেবল একটি নোট ... এজাক্স অনুরোধগুলি ক্রস-ডোমেন তৈরি করা যেতে পারে, তবে কেবল প্রতিক্রিয়ার প্রকারটি jsonp হলেই is আমি সব সময় এটা করি।
এপিফ্যানি

8

ভাল, সবসময় না। কুকি ব্যবহার করে, আপনি ভাল। তবে "আমি কীভাবে নিরাপদে আইডির উপস্থিতিতে নির্ভর করতে পারি" আমাকে একটি গুরুত্বপূর্ণ পয়েন্ট (বেশিরভাগ রেফারেন্সের জন্য, যেহেতু এই পৃষ্ঠার দর্শনার্থীর সংখ্যা বেশ বেশি বলে মনে হচ্ছে) দিয়ে আলোচনাটি বাড়িয়ে দেওয়ার অনুরোধ জানিয়েছে।

পিএইচপি কুকির পরিবর্তে ইউআরএল-পুনর্লিখন দ্বারা সেশনগুলি বজায় রাখতে কনফিগার করা যেতে পারে। ( এটি কীভাবে ভাল বা খারাপ (<- উদাহরণস্বরূপ শীর্ষস্থানীয় মন্তব্য দেখুন) একটি পৃথক প্রশ্ন , আসুন এখনকার একটিকে কেবল আটকে রাখুন, ইউআরএল-ভিত্তিক সেশনগুলির সাথে সর্বাধিক বিশিষ্ট সমস্যা - স্পষ্টতই নগ্ন সেশন আইডির দৃশ্যমানতা - এটি অভ্যন্তরীণ আজাক্স কলগুলির সাথে কোনও সমস্যা নয়; তবে এটি যদি আজাক্সের জন্য চালু হয় তবে এটি বাকী সাইটটির জন্যও চালু রয়েছে, তাই সেখানে ...)

ইউআরএল-পুনর্লিখন (কুকিবিহীন) সেশনের ক্ষেত্রে, অ্যাজাক্স কলগুলি অবশ্যই তাদের যত্ন নেওয়া উচিত যে তাদের অনুরোধের URL গুলি সঠিকভাবে তৈরি করা হয়েছে f (অথবা আপনি নিজের কাস্টম সমাধানটি রোল করতে পারেন less এমনকি ক্লায়েন্টের পক্ষে সেশনগুলি বজায় রাখার জন্য এমনকি কম দাবিযুক্ত ক্ষেত্রে আপনি অবলম্বন করতে পারেন )) বিষয়টি হ'ল কুকিজ ব্যবহার না করে সেশনের ধারাবাহিকতার জন্য সুস্পষ্ট যত্নের প্রয়োজন:

  1. আয়াক্স শুধু কল তাহলে নির্যাস (Umm, cookified) URL গুলি (পিএইচপি থেকে প্রাপ্ত হিসাবে) HTML থেকে ধারণকৃত, যে ঠিক আছে, হিসাবে তারা ইতিমধ্যে রান্না হয় হওয়া উচিত।

  2. তাদের যদি অনুরোধ ইউআরআইগুলিকে নিজেই একত্রিত করতে হয় তবে সেশন আইডিটি ম্যানুয়ালি URL এ যুক্ত করা দরকার। ( পিএইচপি দ্বারা উত্পাদিত পৃষ্ঠা উত্সগুলি এখানে ক্লিক করুন ( ইউআরএল-পুনর্লিখন সহ ) এটি কীভাবে করবেন তা দেখতে))


OWASP.org থেকে :

কার্যকরভাবে, ওয়েব অ্যাপ্লিকেশন উভয় প্রক্রিয়া, কুকিজ বা ইউআরএল প্যারামিটার ব্যবহার করতে পারে, বা এমনকি যদি কিছু শর্ত পূরণ হয় (যেমন, কুকিজ সমর্থন ব্যতীত ওয়েব ক্লায়েন্টের অস্তিত্ব বা কুকিজ না থাকে) তবে অন্য থেকে অন্যটিতে পরিবর্তিত হতে পারে (স্বয়ংক্রিয় ইউআরএল পুনর্লিখন) ব্যবহারকারীর গোপনীয়তার উদ্বেগের কারণে গৃহীত হয়েছে)।

A থেকে রুবি-ফোরাম পোস্ট:

কুকিগুলির সাথে পিএইচপি ব্যবহার করার সময়, সেশন আইডিটি স্বয়ংক্রিয়ভাবে অনুরোধ শিরোনামে এমনকি অ্যাজাক্স এক্সএমএলএইচটিপিআরকোয়েস্টগুলির জন্য প্রেরণ করা হবে। আপনি যদি ইউআরএল-ভিত্তিক পিএইচপি সেশনগুলি ব্যবহার বা অনুমতি দেন তবে আপনাকে প্রতিটি অ্যাজ্যাক্স অনুরোধ url এ সেশন আইডি যুক্ত করতে হবে।


কতজন লোকের সেশন কুকিজ অক্ষম করেছে তার কোনও নির্ভরযোগ্য পরিসংখ্যান ? (আমি কোনও সন্ধান করতে ব্যর্থ হয়েছি Only কেবল জাভাস্ক্রিপ্টে: এটি মার্কিন / ইউরোপে প্রায় 2% এবং বিশ্বের গড়
g

URL- এ সেশন আইডিগুলি একটি পুরানো, অনিরাপদ অনুশীলন। আজকের ওয়েবে, কারও মনেই করা উচিত নয় যে তারা কুকিজ অক্ষম করে সার্ফ করতে পারে এবং এখনও যেখানে তারা অ্যাকাউন্ট রাখে এমন ওয়েব সাইটে লগ ইন করে। যদি আপনার কোনও দর্শকের কুকিজ অক্ষম থাকে তবে সম্ভবত এটি নিরাপদে ধরে নেওয়া নিরাপদ যে তারা) বিশেষত গোপনীয়তার কারণে কোনও সাইটে সাইন ইন করতে সক্ষম হতে চায় না; বা খ) তারা এটিকে দুর্ঘটনাক্রমে করেছিল এবং এখন তারা কেবল আপনার নয় কোনও সাইটে লগ ইন করতে পারে না ।
থোমাসরুটটার

3

এটি খুব গুরুত্বপূর্ণ যে এজেএক্স অনুরোধ অধিবেশন বজায় রাখে। সবচেয়ে সহজ উদাহরণটি যখন আপনি অ্যাডমিন প্যানেলের জন্য একটি এজেএক্স অনুরোধ করার চেষ্টা করেন, আসুন আমরা বলি। অবশ্যই আপনি প্রশাসক লগইন করার পরে সেশনটি পাবেন না এমন অন্যদের অ্যাক্সেস না করার জন্য আপনি যে পৃষ্ঠাটি অনুরোধ করেছেন সেটিকে সুরক্ষিত করবেন। বোধ হয়?


0

যদিও আপনাকে লক্ষ্য রাখতে হবে, বিশেষত যদি আপনি কোনও কাঠামো ব্যবহার করছেন, তা হল অ্যাপ্লিকেশনগুলির মধ্যে অনুরোধের মধ্যে সেশন আইডির পুনর্গঠন হচ্ছে কিনা তা যাচাই করা - সেশন আইডিতে স্পষ্টভাবে নির্ভর করে যে কোনও কিছু সমস্যা হতে চলেছে, যদিও স্পষ্টতই বাকী সমস্ত ডেটা অধিবেশন প্রভাবিত হবে।

যদি অ্যাপ্লিকেশনটি এই জাতীয় সেশন আইডিকে পুনরায় তৈরি করে থাকে তবে আপনি এমন পরিস্থিতিতে শেষ করতে পারেন যেখানে একটি এজ্যাক্স অনুরোধ কার্যকরভাবে অনুরোধ পৃষ্ঠায় সেশন আইডিটিকে অকার্যকর / প্রতিস্থাপন করে।


0

ফ্রেমওয়ার্কগুলি এগুলিই করে, যেমন আপনি ফ্রন্ট কন্ট্রোলার বা বুস্ট্র্যাপ স্ক্রিপ্টে সেশনটি শুরু করেন, পৃষ্ঠার নিয়ামক বা এজাক্স নিয়ন্ত্রণকারীদের জন্য আপনাকে এটির উদ্বেগের কোনও যত্ন নিতে হবে না। পিএইচপি ফ্রেমওয়ার্কগুলি কোনও প্যানিসিয়া নয়, তবে তারা এই জাতীয় অনেক দরকারী কাজ করে!


0

একটি অজ্যাক্স অনুরোধ গ্রহণ করে সমস্ত সার্ভারের পাশের পৃষ্ঠায় আপনার সেশন () লেখক রাখুন:

if(require_once("auth.php")) {

//run json code

}

// do nothing otherwise

এটিই আমি একমাত্র উপায় হয়েছি।

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