In a large pot, bring the milk to a boil over medium heat, stirring occasionally to prevent it from scorching.
Once the milk comes to a boil, reduce the heat to low and gradually add the lemon juice or vinegar, stirring continuously until the milk curdles and separates into curds and whey.
Turn off the heat and let the mixture sit for a few minutes.
Line a colander with a clean muslin cloth or cheesecloth and strain the curdled milk. Rinse the curds under cold water to remove any acidic taste from the lemon juice or vinegar.
Gather the cloth and squeeze out excess water. Hang the cloth for about 30 minutes to an hour to allow the remaining whey to drain completely.
Transfer the drained chhena to a clean, flat surface. Knead the chhena for about 10-15 minutes until it becomes smooth and pliable. You can add a teaspoon of all-purpose flour during the kneading process to help bind the chhena, but it's optional.
Divide the dough into small, equal-sized portions and roll them into smooth balls without any cracks.
In a large pot, bring the water to a boil. Add the granulated sugar and crushed cardamom pods. Stir until the sugar dissolves completely.
Reduce the heat to medium and gently add the chhena balls to the boiling sugar syrup. Cover the pot with a lid and let the rasgullas cook for about 15-20 minutes. The rasgullas will expand and become spongy as they cook.
After 15-20 minutes, check if the rasgullas are cooked by pressing one gently. It should spring back to its original shape. If it does, it's done.
Remove the pot from heat and let the rasgullas cool in the sugar syrup. You can add saffron strands or a few drops of rose water for added flavor, if desired.
Once cooled, transfer the rasgullas and syrup to a serving dish and refrigerate until chilled.
Enjoy your meal!